HTTP版本区别

什么是HTTP协议?

HTTP协议全称HyperText Transfer Protocol,中文名超文本传输协议。HTTP是基于TCP/IP协议的应用层协议,不涉及数据包的传输。主规定了客户端与服务端之间的通信格式以及所占用的服务端口80。

HTTP/0.9

HTTP 0.9是最早发现的一个版本,在1991年发布。只接受GET一种请求方法,由于不支持其他请求方式,因此客户端是没办法向服务端传输太多的信息。不支持请求头。仅能请求访问HTML格式的资源

HTTP/1.0

 HTTP 1.0是HTTP协议的第二个版本在1996年发布。新增了POST和HEAD等请求方式。请求行必须在尾部添加协议版本字段(http/1.0),必须包含头消息 ,头信息必须是 ASCII 码。扩充了传输内容格式,图片、音视频资源、二进制等都可以进行传输。同时也开始支持cache,就是当客户端在规定时间内访问统一网站,直接访问cache即可。 其他的新增功能还包括状态码(status code)、多字符集支持、权限(authorization)、内容编码(content encoding)等。无状态:服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,但是会导致它在完成有关联性的操作时会非常麻烦。例如登录->添加购物车->下单->结算->支付,这系列操作都要知道用户的身份才行。但服务器不知道这些请求是有关联的,每次都要问一遍身份信息。浏览器的每次请求都要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接。每个TCP只能发送一个请求。发送数据完毕,连接就关闭。如果还要请求其他资源,就需要再建立一个连接。TCP三次握手是一个很耗费时间的过程,所以HTTP/1.0性能比较差。

HTTP/1.1

HTTP 1.1 是在 1.0 发布之后的半年(1997)就推出了。新增了PUT、PATCH、OPTIONS、DELETE等请求方式。引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive,客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。如果不需要长连接,则在头部信息加上:Connection:close,接受到请求的客户端就会自动关闭连接。 管道机制:在同一个TCP连接里,允许多个请求同时发送,增加了并发性,进一步改善了HTTP协议的效率。添加参数content-length:指明响应体数据的大小,浏览器收到如数的响应知道响应完成,就可以关闭连接。缓存处理:当浏览器请求资源时,先看是否有缓存的资源,如果有缓存,直接取,不会再发请求,如果没有缓存,则发送请求,通过设置字段cache-control来控制缓存。支持文件断点续传,在上传/下载资源时,如果资源过大,将其分割为多个部分,分别上传/下载,如果遇到网络故障,可以从已经上传/下载好的地方继续请求,不用从头开始,提高效率。新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

HTTP/2

HTTP /2 是在2015年发布。二进制协议:HTTP/1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。多路复用:在一个连接中客户端和浏览器都可以同时发送多个请求或回应,而不用按照顺序一一对应,这样就避免了"队头堵塞"。数据流:数据包不是连续发送的,同一个连接里面的连续的数据包,可能属于不同的回应。必须对包进行标记,指出属于哪个回应。每个请求或回应的所有数据包,称为一个数据流(Stream)。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流ID,用来区分它属于哪个数据流。另外还规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。数据流发送到一半的时候,客户端和服务器都可以发送信号(RST_STREAM帧),取消这个数据流。HTTP1.1版取消数据流的唯一方法,就是关闭TCP连接。HTTP/2 可以取消某一次请求,同时保证TCP连接还打开着,可以被其他请求使用。客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应。头信息压缩:HTTP 协议不带有状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如CookieUser Agent,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。HTTP/2 对这一点做了优化,引入了头信息压缩机制(header compression)。一方面,头信息使用gzipcompress压缩后再发送;另一方面使用HPACK算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。服务器推送:HTTP/2 允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送(server push)。当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

 

 

HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

常见的:

GET
当客户端要从服务器读取文档时,点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页,都是GET方式。
GET方法要求服务器将URL定位的资源放在响应报文的数据部分,会送给客户端。
使用GET方法时,请求参数和对应的值附加在URL后面,以一个(?)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如:/index.jsp?id=100&op=bind.
POST
POST方法将请求的参数封装在HTTP请求数据中,以名称/值的方式出现,可以传输大量数据,对传送的大小没有限制,也不会显示在URL中。
HEAD
HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的,因为在传输的过程中省去了页面内容。

posted @ 2022-05-14 17:02  good_hao  阅读(219)  评论(0编辑  收藏  举报