Http 1.0、1.1、2.0比较分析

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

HTTP Request

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36     (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept    image/webp,image/*,*/*;q=0.8
Referer    http://www.imooc.com/
Accept-Encoding    gzip, deflate, sdch
Accept-Language    zh-CN,zh;q=0.8

HTTP Response

一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
  <head></head>
  <body>
        <!--body goes here-->
  </body>
</html>

HTTP1.0 vs 1.1对比

功能 http1.0 http1.1
长连接 默认关闭,在http头加入”Connection: Keep-Alive”,才能启用 默认开启,加入”Connection: close “,才关闭
缓存 使用Expire头域来判断资源的fresh或stale;定义了Pragma:no-cache头域不使用缓存;If-Modified-Since头域使用的是绝对时间戳,精确到秒; 缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活;引入了一个ETag头域用于重激活机制
节约带宽 不支持断点续传 请求消息中引入了range头域,它允许只请求资源的某个部分,支持断点续传
头部Host域 不支持 支持
消息传递 头域Content-MD5校验,不支持分块 引入Chunkedtransfer-coding,支持分块
错误码 16个 新增24个

HTTP1.1 vs 2.0对比

功能 http1.1 http2.0
多路复用 不支持,必须得开多个TCP连接 支持同一个连接并发处理多个请求
数据压缩 支持数据部分压缩,不支持头部压缩 支持头部压缩,支持数据压缩
服务推送 不支持,只能客户端主动从服务器获取资源 支持服务端推送资源给浏览器
传输方式 文本的方式传输数据 二进制数据传输
安全 不支持加密,得用HTTPS HTTP2.0使用了TLS的拓展ALPN做为协议升级,对tls的安全性做了近一步加强

参考资料

  1. HTTP1.0,HTTP1.1和HTTP2.0的区别
  2. 一篇文章让你入门HTTP2.0