HTTP版本区别:HTTP/1.0;HTTP/1.1;HTTP/2.0

HTTP/1.0和HTTP/1.1之间区别:

1,HTTP/1.1默认长连接以及请求流水线处理

HTTP/1.0可以通过设置header connection:keep_Alive来支持长连接

HTTP/1.1多个请求和响应可以同时进行,即流水线处理

2,HTTP/1.1增加HOST字段

HTTP/1.0认为每台服务器都绑定一个唯一的ip,因此请求头没有包含主机名(HOST字段)

虚拟主机可以在一台物理服务器上存在多个虚拟主机,并且他们共享同一个ip

3,HTTP/1.1增加100状态码

客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。

4,其他

支持同时打开多个TCP连接;

引入了Chunked transfer-coding来解决消息分块问题;

cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活

HTTP/2.0和HTTP/1.x之间的区别:

HTTP/1.x的缺陷

  • 客户端需要使用多个连接才能实现并发和缩短延迟;
  • 不会压缩请求和响应首部,从而导致不必要的网络流量;
  • 不支持有效的资源优先级,致使底层 TCP 连接的利用率低下

1,二进制分帧层而非文本格式

HTTP/2.0将报文分成HEADERS帧和DATA帧,都为二进制形式

2,HTTP/2.0支持完全多路复用,并非有序并阻塞

HTTP/1.x 有个问题叫线端阻塞(head-of-line blocking), 它是指一个连接(connection)一次只提交一个请求的效率比较高, 多了就会变慢。 HTTP/1.1 试过用流水线(pipelining)来解决这个问题, 但是效果并不理想(数据量较大或者速度较慢的响应, 会阻碍排在他后面的请求). 而多路传输(Multiplexing)能很好的解决这些问题, 因为它能同时处理多个消息的请求和响应; 甚至可以在传输过程中将一个消息跟另外一个掺杂在一起。所以客户端只需要一个连接就能加载一个页面。

3,HTTP/2.0支持消息头部压缩

HTTP/1.1的首部带有大量信息,每次都要重复发送

HTTP/2.0要求客户端和服务器同时维护和更新一个包含之前见过的首部字段表,从而避免了重复传输

HTTP/2.0也使用了哈夫曼编码对首部字段进行编码

4,服务端"主动"推送

当客户端请求一个网页时,服务器将会发回HTML,在服务器开始发送JavaScript、图片和CSS前,服务器需要等待浏览器解析HTML和发送所有内嵌资源的请求。服务器推送服务通过“推送”那些它认为客户端将会需要的内容到客户端的缓存中,以此来避免往返的延迟。

参考地址:

               https://www.cnblogs.com/frankyou/p/6145485.html

               https://cyc2018.github.io/CS-Notes/#/notes/HTTP?id=http1x-%E7%BC%BA%E9%99%B7

猜你喜欢

转载自blog.csdn.net/ailaojie/article/details/89054065