自我学习HTTP/1.1

229 阅读2分钟

前言

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

自我学习HTTP/1.1

HTTP/1.1

新增特性

  1. 改进持久连接(长连接) :默认开启,关闭connection:close (HTTP/1.0也有长连接,只是默认关闭,开启:connection:keep-alive) ;

    特点是:在一个TCP连接上可以传输多个HTTP请求,只要浏览器或者服务器没有明确断开连接,那么该TCP连接会一直保持。对于Chrome来说,同一个域名,默认允许同时建立6个TCP长连接

  2. 不成熟的HTTP管线化(队头阻塞) :持久连接虽然能减少TCP建立和断开次数,但是他它需要等待前面的请求返回之后,才能进行下一次请求,如果某个请求没有及时返回,那么就会阻塞后面的请求。

    HTTP/1.1的管线化是将多个HTTP请求整批提交给服务器,虽然是在整批发送,但是服务器依然是根据请求顺序来返回数据。

  3. 提供虚拟主机的支持:在HTTP/1.0中,每个域名绑定了一个唯一的IP地址,因此一个服务器只能支持一个域名。但是随着虚拟主机技术的发展,需要实现在一台物理主机上绑定多个虚拟主机,每个虚拟主机都有自己的单独的域名,这些单独的域名都公用同一个IP地址。

    因此HTTP/1.1的请求头中增加了Host字段,用来表示当前的域名地址,这样服务器就可以根据不同的host值做不同的处理。

  4. 缓存处理:引入了更多的缓存控制策略,如Cache-Control、Etag/If-None-Match等。

问题存在的主要原因

HTTP/1.1使用了CDN的实现域名分片机制,但是对带宽的利用率不高

  1. TCP的慢启动: 为了减少网络拥塞的一种策略;

  2. 多条TCP链接,会竞争带宽

  3. 队头阻塞