http1.x http2.0浅析
来源:互联网 发布:藏族演出服淘宝网 编辑:程序博客网 时间:2024/06/13 17:25
一 HTTP 1.0
http1.0版本,默认是短链接,即每次请求需重新建立TCP连接,数据传送后断开连接,每次请求互不干扰,相互独立,即连接无法复用,同时存在令人诟病的head of line blocking问题,即其中一个响应没有到达,后续所有的请求将被阻塞;
如:
curl -0 --head "http://httpdnsv3.ffdns.net/httpdns?dn=report.laogen.xyz"HTTP/1.1 200 OKDate: Tue, 11 Jul 2017 01:13:38 GMTContent-Type: text/plainConnection: closeServer: XNS-HTTPDNS
实际,在http1.0标准协议中是支持长连接的,需要设置http报文头部Connection域为keep-alive
如:
curl -0 --head -H"Connection:keep-alive" "http://httpdnsv3.ffdns.net/httpdns?dn=report.laogen.xyz"HTTP/1.1 200 OKDate: Tue, 11 Jul 2017 01:13:55 GMTContent-Type: text/plainConnection: keep-aliveServer: XNS-HTTPDNS
短链接的缺点是,每次都要建立新的TCP连接,增加开销。如,一个网页有10张图片,则需要十个TCP连接,考虑一下,每次TPC连接都要经过三次握手,即增加量1.5RTT时间,再加上TCP慢启动机制,频繁的建立连接将消耗大量时间和资源,加上之前提到的head of line blocking 问题,http1.1对以上两个问题做了一定优化。
二 HTTP 1.1
http1.1版本,默认是长连接,即在同一TCP连接上,可以传送多个http请求和响应。
如:
curl --head -H"Connection:keep-alive" "http://httpdnsv3.ffdns.net/httpdns?dn=report.laogen.xyz"HTTP/1.1 200 OKDate: Tue, 11 Jul 2017 01:28:11 GMTContent-Type: text/plainConnection: keep-aliveServer: XNS-HTTPDNS
同时,http1.1还支持并发请求,即不需要等待上一次请求结果就可以发送下一次请求-http pipelining
不仅如此,HTTP 1.1还通过增加更多的请求头和响应头来改进和扩充HTTP 1.0的功能。例如,由于HTTP 1.0不支持Host请求头字段,
WEB浏览器无法使用主机头名来明确表示要访问服务器上的哪个WEB站点,这样就无法使用WEB服务器在同一个IP地址和端口号上
配置多个虚拟WEB站点。在HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,
这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。HTTP 1.1的持续连接,
也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;
Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
通过上边学习,http1.1性能提高已经很多,但是还是有很多可以优化的地方,比如http1.1 http pipelining
- pipelining 只适用于http1.1,并且要求server段支持
- 只有幂等请求(head / get)支持pipelining,因为非幂等的请求可能存在依赖关系
- head of line blocking 没有得到完全解决,其中:
a. 对于同一个域名, pipelining个数有限制,超过限制的请求将被阻塞
b. response要求依次返回,遵循FIFO原则,即请求1的响应没有回来,2.3.4…的响应也不会回来
c. 大部分代理不支持pipelining
……
另外长连接的问题:有文章提到,长连接的时间只能保持一段时间;(有待学习)
三 HTTP 2.0
http2.0版本,在http1.1的基础上做了如下优化,减少网络延迟,提高吞吐量:
(以下图片来自https://www.zhihu.com/question/34074946)
1. 多路复用
突破1.1并发限制,通过多个请求流共享一个TCP连接,解决了http1.x head of line blocking问题
在http2.0中,将通信的基本单位缩小为二进制帧,在单一连接上,可以实现多流并行;
2. 请求优先级
多路复用带来的问题是,在共享同一连接的基础上,可能会导致重要的请求被阻塞,2.0支持给每个请求设置优先级,这样重要的请求会优先得到响应
3. 首部压缩
http1.1不支持首部压缩,http2.0采用HPACK算法压缩头部信息
4. 服务端推送
即服务端可以对客户端一个请求发送多个响应,比如客户端请求主页,那么服务端可能会把主页内容,logo图片等信息一起响应。
更重要的一点是:可以缓存!也让在遵循同源的情况下,不同页面之间可以共享缓存资源成为可能。(我理解是:两个或多个页面使用了统一资源的图片或其他类型资源在内,那么就可以缓存并复用)
- http1.x http2.0浅析
- http1.X 和 http2.0 的区别
- http2.0与http1.X的区别
- HTTP1.X HTTPS SSL HTTP2.0
- http1.1与http2.0
- HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
- HTTP1.0、HTTP1.1和HTTP2.0的区别
- HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
- HTTP1.0、HTTP1.1和HTTP2.0的区别
- HTTP2.0与HTTP1.0的区别
- HTTP2.0与HTTP1.0的区别
- http1和http2
- Http1.0、Spdy和Http2.0的对比
- tcp udp http http1.0 http2.0汇总
- HTTP1.0,HTTP1.1,HTTP2.0,SPDY,HTTPS你应该知道的一些事
- http1.0,http1.1,http2.0。https和http的区别
- http1 & http2 发展与特性
- http1 & http2 发展与特性
- F. Card Game
- SQL SERVER 的前世今生--各版本功能对比
- 如何在python3.3用 map filter reduce
- Python爬虫库学习笔记-requests
- 实现指定文件目录下的文件树,然后对结点的增删可以同时作用于文件
- http1.x http2.0浅析
- 蓝桥杯 ADV-70 算法提高 冒泡法排序
- shared_ptr循环引用问题
- 暑假Fourteen宝岛地图
- 浙大PAT甲级-1031
- DreamWeaver
- Python NameError: name 'reduce' is not defined
- CentOS下JDK的安装
- QT QTbaleView移除网线