从http1.0到http1.1

HTTP1.0,1.0应该是一个软件的初始版本.第一个正式版本.
出现的背景:

1989 年 3 月,互联网还只属于少数人。在这一互联网的黎明期,HTTP 诞生了。
CERN(欧洲核子研究组织)的蒂姆 • 伯纳斯 - 李(Tim BernersLee)博士提出了一种能让远隔两地的研究者们共享知识的设想。
最初设想的基本理念是:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的 WWW(World Wide Web,万维网)。包括的关键技术是 HTML, HTTP 和 URL.
92 年 9 月,日本第一个网站的主页上线了。  [^n]
http://www.ibarakiken.gr.jp/www/

HTTP诞生于1990年,但是HTTP 正式作为标准被公布是在 1996 年的 5 月,版本被命名为 HTTP/1.0,并记载于 RFC1945。
HTTP1.0规范: http://www.ietf.org/rfc/rfc1945.txt


1.0的几个特点和问题.

  • 没有复用tcp连接,针对同一主机的请求只能是串行执行.
TCP的几个特性影响这里的速度.启动耗时(需要握手),冷启动问题.
  • 假设主机唯一绑定IP.HTTP1.0中认为每台服务器都绑定一个唯一的IP地址.所以不会传host.
  • 少量的协商请求.
  • 实现了Expires等传输内容的缓存控制 这个地方存在一些BUG

针对上面的问题,提出了http1.1协议.
中文版的http1.1协议 [^n]

  • 增加了keep-alive,也就是说可以复用TCP连接了.  协议里面最主要,也是最有用的改动
  • 并且在请求中加上当前请求域名HOST ,可以同一个IP多个域名了
  • 增加了一些HTTP的状态号.1XX等.
  • 增加了分块传输数据的形式   chunked
  • 允许客户端在一个请求未完全返回之前发送下一个请求(PIPE).但是在实际情况下并没有很大规模的实现.
  • 增加了内容协商机制,编码,压缩协议等

在此时期.浏览器厂商开始针对HTTP协议提出并行解决方案.浏览器在同一时间向同一个主机发起多个(4-8)并发的请求来获取资源.(之前1.0规定为2个链接最多)
针对此前端出现了http多域名加快页面加载速度的解决方案.
在HTTP1.1协议出台之后(1997年),http1.1的keep-alive特征被移植到了http1.0的实现上.可以说这个时候是一些http1.0+的版本.

http1.1中解决了很多1.0中很棘手的问题,但是并没有发挥出TCP链接的优点.相反还会暴漏出TCP的弱点.但是针对1.0到1.1的优化和改进.也要给WEB的发展带来了莫大的好处.

TCP连接复用,直接的结果就是能够让减少握手的时间.在一个页面中对同一个域名的请求比较多的时候.能够很大程度上节省效率.

chunked的编码方式.能够很大程度上支持流式加载,能够更好的支持压缩协议.

一种新的缓存机制被引入.实现了强缓存的实现.

具体可以参考这篇文章[^n]

HTTP1.1中存在的一些问题:

对同一个域名发起的请求即使可以并发,可以复用TCP ,也同样会存在反复建立TCP连接的问题.会有很多性能消耗在握手和冷启动上面.[针对性的解决方案就是提高浏览器并发]

对于HTTP请求的头部信息.使用的是明文传输,并且每次都会携带很多不会轻易改变的信息.比如cookie和UA信息.导致流量的浪费.
[针对的解决方案是提供一些不需要cookie的域名提供静态资源服务和响应的强缓存策略]

HTTP1.1版本到现在已经陪伴我们快有20年了.在当初设计和实现的过程中也经过了不断的思考.2016年.是它开始慢慢走向退休的时候了.

Show Comments
备案信息: 京ICP备20002019号