HTTP历史脉络

HTTP协议最早由万维网之父Tim Berners-Lee提出。

1991.8.6日,Tim Berners-Lee在位于欧洲粒子物理研究所(CERN)的NeXT计算机上,正式公开运行世界上第一个web网站(http://info.cern.ch),建立起基本的互联网基础概念和技术体系。

HTTP 0.9:单行协议

1991年,Tim根据自己的实现,写了一篇关于HTTP协议的文章,这篇文章后来被看成是HTTP/0.9版本。详见:https://www.w3.org/Protocols/HTTP/AsImplemented.html

 这篇文章相当简单,只有短短的四小节:

  • 规定了HTTP使用的TCP/IP连接
  • HTTP请求只有一个请求行
  • 只有一个GET方法加上请求的URI
  • HTTP响应则直接返回HTML文本,没有状态码,所以也没有办法区分错误消息和正常的文本

HTTP/ 1.0:快速增长和Informational RFC

在这之后,万维网经历了十分混乱的时期。由于Tim最初版本的HTTP和HTML并不完善,无法满足各种应用场景,因此很多公司和组织在其基础上做了各种扩展,但彼此并不兼容。

1994年,Tim离开了CERN成立了W3C组织,致力于HTML的标准化工作。同年,IEFT成立了HTTP工作组(HTTPWorkingGroup:HTTP-WG),研究改进HTTP协议。

一直到1996年5月发布了RFC1945,这就是现在的HTTP/1.0。

HTTP/1.0在0.9的基础上做了大量的扩充和改进:

  • 请求和响应支持头域
  • 响应对象以一个响应状态行开始
  • 响应对象不只限于超文本
  • 开始支持客户端通过POST方法向web服务器提交数据,支持GET、HEAD、POST方法
  • 支持长连接(但默认还是使用短连接),缓存机制以及身份认证

但同时,HTTP/1.0也存在不足,由于每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。所以,TCP连接的新建成本很高,版本性能比较差。

HTTP/1.1:Internet标准

与HTTP/1.0相比,拥有以下特点:

1)引入了持久连接:

即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection:keep-alive。客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection:close,明确要求服务器关闭TCP连接。

2)引入了管道机制:

即在同一个TCP连接里面,客户端可以同时发送多个请求。这样就进一步改进了HTTP协议的效率。

3)将Content-length字段的作用进行扩充:

即声明本次回应的数据长度(一个TCP连接现在可以传送多个回应,势必就要有一种机制,区分数据包是属于哪一个回应的)。

4)采用分块传输编码:

对于一些很耗时的动态操作,服务器需要等到所有操作完成,才能发送数据,显然这样的效率不高。更好的处理方法是,产生一块数据,就发送一块,采用“流模式”(stream)取代“缓存模式”(buffer)。

5)新增动词方法PUT、PATCH、HEAD、OPTIONS、DELETE。另外客户端请求的头信息新增了Host字段,原来指定服务器的域名。

虽然1.1版本允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为“队头阻塞”(Head-of-line blocking)。

为了避免这个问题,只有两种方法:i)减少请求数 ii)同时多开持久连接

这导致了很多网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片等等。如果HTTP协议涉及得更好一些,这些额外的工作是可以避免的。

HTTP/2:提高传输性能

HTTP2主要目标在于提高传输性能,实现低延迟和高吞吐量。

HTTP2至今无法普及的一个内在原因:HTTP/2协议本身并不要求必须加密传输,它可以基于TLS实现加密传输(HTTP/2 over TLS:h2),也可以使用明文传输(HTTP/2 without TLS:h2c),然而出于推广https的需要以及一些技术上的考虑,目前所有的浏览器都不支持h2c。

所以如果要支持HTTP/2,必须基于TLS来部署,这也在一定程度上限制了HTTP/2的普及。

想要了解HTTP/2的特点,可以参看这篇文章:https://hpbn.co/http2/

为什么是HTTPS?

一个完整的https的请求过程:

原文地址:https://www.cnblogs.com/i-hard-working/p/11148897.html