HTTP0.9
要规定了客户端和服务器之间的通信格式,默认使用80端口。
没有首部;只能获取纯文本
只支持GET方法.
请求完成后即关闭TCP连接
HTTP1.0
任何格式的内容都可以发送。不仅可以传输文字,还能传输图像、视频、二进制文件。
除了GET命令,还引入了POST命令和HEAD命令,丰富了浏览器与服务器的互动手段。
HTTP请求和回应的格式也变了。除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。
新增功能还包括状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等
HTTP1.1
持久连接(keep-alive):TCP连接默认不关闭,可以被多个请求复用
管道机制(pipelining):同一个TCP连接里面,客户端可以同时发送多个请求。但是服务器还是按照顺序响应。
分块传输编码:对于动态生成的响应类容,可以使用分块传输,边生成边发送
新增了许多动词方法:PUT、PATCH、HEAD、 OPTIONS、DELETE。
客户端请求的头信息新增了Host字段,用来指定服务器的域名:有了Host字段,就可以将请求发往同一台服务器上的不同网站,为虚拟主机的兴起打下了基础。
HTTP2.0
多路复用:HTTP2建立一个TCP连接,一个连接上面可以有任意多个流(stream),消息分割成一个或多个帧在每个流里面传输。帧传输过去以后,再进行重组,形成一个完整的请求或响应。
二进制帧:1.1响应是文本格式,而2.0把响应划分成了两个帧,HEADERS和DATA 是帧的类型。也就是说一条HTTP响应,划分成了两个帧来传输,并且采用二进制来编码。
头信息压缩:每个请求带的一些首部字段都是相同的,例如cookie、user-agent等。HTTP2压缩首部。
服务器推送:服务器端推送使得服务器可以预测客户端需要的资源,主动推送到客户端。如客户端请求index.html,服务器端能够额外推送script.js和style.css。