前言
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
自我学习HTTP/1.1
HTTP/1.1
新增特性
-
改进持久连接(长连接) :默认开启,关闭connection:close (HTTP/1.0也有长连接,只是默认关闭,开启:connection:keep-alive) ;
特点是:在一个TCP连接上可以传输多个HTTP请求,只要浏览器或者服务器没有明确断开连接,那么该TCP连接会一直保持。对于Chrome来说,同一个域名,默认允许同时建立6个TCP长连接
-
不成熟的HTTP管线化(队头阻塞) :持久连接虽然能减少TCP建立和断开次数,但是他它需要等待前面的请求返回之后,才能进行下一次请求,如果某个请求没有及时返回,那么就会阻塞后面的请求。
HTTP/1.1的管线化是将多个HTTP请求整批提交给服务器,虽然是在整批发送,但是服务器依然是根据请求顺序来返回数据。
-
提供虚拟主机的支持:在HTTP/1.0中,每个域名绑定了一个唯一的IP地址,因此一个服务器只能支持一个域名。但是随着虚拟主机技术的发展,需要实现在一台物理主机上绑定多个虚拟主机,每个虚拟主机都有自己的单独的域名,这些单独的域名都公用同一个IP地址。
因此HTTP/1.1的请求头中增加了Host字段,用来表示当前的域名地址,这样服务器就可以根据不同的host值做不同的处理。
-
缓存处理:引入了更多的缓存控制策略,如Cache-Control、Etag/If-None-Match等。
问题存在的主要原因
HTTP/1.1使用了CDN的实现域名分片机制,但是对带宽的利用率不高。
-
TCP的慢启动: 为了减少网络拥塞的一种策略;
-
多条TCP链接,会竞争带宽;
-
队头阻塞。