什么是HTTP协议
了解什么是http协议前,我们先来说说什么是超文本。
超文本:超文本是指包含指向其他文档链接的文本。
HTTP协议:又称超文本传输协议,定义了客户进程和服务器之间是如何进行文档传输的。
HTTP性质
1>HTTP协议是应用层协议。
2>HTTP报文使用TCP连接进行传送。
3>虽然TCP是面向连接的运输层协议,但HTTP协议本身是无连接的。
4>HTTP协议是无状态的,同一个用户第二次访问页面,服务器相应与第一次访问相同。即不区分不同用户。
HTTP传输数据的过程
第一个RTT用于TCP连接,第二个RTT用于请求和接收万维网文档,这里TCP连接第三个报文段捎带客户对文档的请求。
HTTP/1.0和HTTP/1.1
区别:
HTTP1.1中将所有的连接默认为持续连接,而HTTP/1.0内并未标准化。
原因:
如果每进行一次HTTP通信就要断开一次TCP连接,那么在请求一个复杂的页面时,每次请求都会造成无谓的TCP连接建立和断开,
增加通信量的开销。
持续连接的工作方式:
(1)非流水线方式:客户在接收到前一个响应后才能发出下一个请求。所以在服务器发送完一个对象后,TCP连接处于空闲状态,浪费服务器资源。
(2)流水线方式:能够同时并行发送多个请求,而不需要一个接一个地等待响应。
HTTP/2.0:
HTTP/2.0的目标是改善用户使用Web时的速度体验。
HTTP报文结构
请求报文
(1)请求行
请求报文的第一行只有三个内容:方法,请求资源的URL,以及HTTP的版本。
例:GET http://blog.csdn.net/leeezm HTTP/1.1
(2)首部行
首部行包含用来说明浏览器,服务器和报文主体的一些信息。
例:Connection:keep-alive
(3)实体主体:请求报文中一般不使用。
方法
方法 | 说明 |
---|---|
GET | 查询 |
POST | 增加 |
PUT | 更新 |
DELETE | 删除 |
HEAD | 获取报文首部 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求使用隧道协议连接代理 |
响应报文
(1)响应报文的第一行为状态行。
状态行包括HTTP的版本,状态码,以及解释状态码的简单短语。
例:HTTP/1.1 202 Accepted [接受]
(2)首部行
首部行包含用来说明浏览器,服务器和报文主体的一些信息。
例:Connection:keep-alive
(3)实体主体:有些响应报文不用。
状态码:
方法 | 说明 | 说明 |
---|---|---|
1XX | 信息性状态码 | 接收的请求正在处理 |
2XX | 成功状态码 | 请求正常处理完毕 |
3XX | 重定向状态码 | 需要进行附加操作以完成请求 |
4XX | 客户端错误状态码 | 服务器无法处理请求 |
5XX | 服务器错误状态码 | 服务器处理请求出错 |
常见状态码
200 OK 表示从客户端发来的请求在服务器端被正常处理了
204 No Content 表示服务器接收的请求已被正常处理,但返回的响应报文中不含实体的主体部分。
用于只需客户端向服务器发消息,而对客户端不需发送新内容。
206 Partial Content 表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求
301 Moved Permanently 永久性重定向
302 Found 临时性重定向
303 See Other 该资源存在另一个URI,应使用GET方法获取资源
302和303差别:303明确使用GET方法
304 Not Modified 服务器端资源未改变,可直接使用客户端未过期的缓存
307 Temporary Redirect 临时重定向
302和307:307不会从POST变成GET
400 Bad Request 表示请求报文中存在语法错误
401 Unauthorized 表示发送的请求需要通过HTTP认证
403 Forbidden 表明对请求资源的访问被服务器拒绝了
404 Not Found 表明服务器上无法找到请求的资源
500 Internal Server Error 表明服务器在执行请求时发生了错误
503 Service Unavailable 表明服务器超负荷或停机维护,无法处理请求
504 (网关超时) 服务器作为网关或代理,未及时从上游服务器接收请求。
注意
当301,302,303响应状态码返回时,几乎所有的浏览器都会把 POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。