1、什么是HTTP协议
-
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。
-
HTTP协议(Hypertext Transfer Protocol,超文本传输协议):是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览。可以使浏览器更加高效,使网络传输减少。不仅保证计算机快速高效地传输超文本档,还确定传输文本中的哪一个部分,以及哪一部分内容首先显示(如文本先于图形)
-
目前我们使用的是HTTP/1.1 版本
-
HTTP协议工作于客户端-服务端(browser/server)B/S架构上。
-
无连接(一次请求就断开)无状态(没有记忆功能,不会记录任何信息)
2、HTTP协议的交互过程
浏览器作为HTTP客户通过URL向HTTP服务器发送所有请求。web服务器根据收到的请求后,向客户端发送响应信息。
3、Web服务器,浏览器,代理服务器
-
打开浏览器,在地址栏中输入URL,就能看到网页的原理:有两种情况:
1、 网站直接链接到服务器:
当我们输入URL后,我们的浏览器给Web服务器发送了一个Request, Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器, 浏览器解析Response中的HTML,这样我们就看到了网页,过程如下图所示
2、网站经过代理再链接到服务器:
我们的Request 有可能是经过了代理服务器,最后才到达Web服务器的。Proxy 代理服务器可以在请求、返回数据的时进行修改拦截。
过程如下图所示
-
代理服务器就是网络信息的中转站,有什么功能呢?
-
提高访问速度, 大多数的代理服务器都有缓存功能。
-
突破限制, 也就是翻墙了
-
隐藏身份
4、HTTP常见的请求方法
1.GET
向指定资源发出显示请求,并返回实体主体
2.HEAD
和GET一样,但是不传回所有资源内容。只请求页面的首部
3.POST
向指定资源提交数据,数据被包含在请求中。请求服务器接受所指定的文档作为对所标识的URI的新的从属实体
4.PUT
向指定位置上传。从客户端向服务器传送的数据取代指定的文档的内容。
5.DELETE
删除所标识的资源
6.OPTIONS
这个方法可使服务器传回该资源所支持的所有请求HTTP请求方法
7、TRACE
请求服务器在响应中的实体主体部分返回所得到的内容。
8、PATCH
实体中包含一个表,表中说明与该URI所表示的原内容的区别。
5、HTTP协议是无状态的
http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.
6、HTTP消息的结构
Request请求数据包
-
请求包格式:
request=请求行(请求方式 URL 协议/版本)+请求头(形势都为ket:value)+空行+请求数据(若此处为空,请求包的请求方式为GET,数据存放在URL中,若有数据,则说明该请求方式为POST)
-
结构如图:
-
第一行中的Method表示请求方法,比如"POST","GET",Path-to-resoure表示请求的资源, Http/version-number 表示HTTP协议的版本号
-
当使用的是"GET" 方法的时候, body是为空的
-
比如我们打开博客园首页的request 如下:
-
eg:
Response返回数据包
-
response=状态行(协议/版本 状态码)+消息报头+空行+响应正文(也叫做响应内容,是由HTML+CSS+JS组成的响应正文)
-
结构如下图:
HTTP/version-number表示HTTP协议的版本号
7、HTTP协议状态码
-
Response 消息中的第一行叫做状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
-
状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response
类别
-
HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别
1XX:提示信息 - 表示请求已被成功接收,继续处理
2XX:成功 - 表示请求已被成功接收,理解,接受
3XX:重定向 - 要完成请求必须进行更进一步的处理
4XX:客户端错误 -请求有语法错误或请求无法实现
5XX:服务器端错误 -服务器未能实现合法的请求
一些常见的状态码
-
200 OK //客户端请求成功
最常见的就是成功响应状态码200了, 这表明该请求被成功地完成,所请求的资源发送回客户端
-
302 Found
重定向,告诉用户端访问的资源已被转移,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
-
304 Not Modified
代表上次的文档已经被缓存了, 还可以继续使用,
例如打开博客园首页, 发现很多 Response 的status code 都是304
提示: 如果你不想使用本地缓存可以用Ctrl+F5强制刷新页面
-
400 Bad Request
客户端请求与语法错误,不能被服务器所理解
-
401
请求未授权
-
403 Forbidden
服务器收到请求,但是拒绝提供服务
-
404 Not Found
比如在IE中输入一个错误的URL, http://www.cnblogs.com/tesdf.aspx
-
500 Internal Server Error
服务器发生了不可预期的错误,服务器内部错误
-
503 Server Unavailable
服务器当前不能处理客户端的请求,一段时间后可能恢复正常