HTTP各版本简介

mac2025-08-01  5

简介

HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是一种用于客户端与服务端进行信息交换的通信协议; 特点:

简单无状态:http本身是无状态协议,通过Http Cookie实现了有状态的会话;连接:一般基于TCP连接,请求的默认端口号是80(HTTPS默认端口号443);

版本及特点

HTTP/0.9 —— 单行协议 特点:

请求不包含版本号信息,仅支持get请求;协议由单行指令构成: GET /index.html;响应无Header及状态码,仅包括HTML文档本身;

HTTP/1.0 —— 构建可扩展性 特点:

协议版本随GET行发送;引入HTTP头,请求或相应为多行指令构成;包括:Allow/ Authorization/content-type/content-coding/content-length/Date/Expires/From/If-modified-Since/Last-Modified/Location/Pragma/Referer/Server/User-Agent/WWW-Authenticate等;支持更多的请求方法:GET/HEAD/POST;支持更多的资源类型:html、图片、音视频等;引入状态码:

缺点:

HTTP请求基于TCP连接,HTTP/1.0协议中每次请求均需要建立TCP连接,不可服用;安全性:是一种无状态协议,身份认真需要通过HTTP Cookie,明文传输数据,因此具有被攻击的危险;协议开销大:头部信息过大后,每次请求都会携带这些信息;不仅造成带宽浪费,也会增加服务延时;

HTTP/1.1 —— 标准化的协议 特点:

长连接:HTTP/1.1默认采用长连接,即同域名下建立一个TCP连接用于多次通信和数据传输;管道化:持久化连接中,可以不用等一个请求被响应后再发送请求,可以连续发送多个请求;当然,服务端的响应顺序是与请求顺序保持一致的;引入新的缓存机制:引入cache-control机制;内容协商机制:客户端与服务端约定请求的方法、语言、编码类型等信息;使用Accept/Accept-Language/Accept-Encoding等;分块传输编码:支持Chunked Transfer Coding,对响应数据进行分块传输,每个chunk包含其大小及数据(均为十六进制),size信息独占一行;可以用于动态处理内容的传输;使用头部Transfer-Encoding: chunked标识;最后一个chunk仅包含size信息,用于告知数据传输完成;更加丰富的请求方法:OPTIONS/GET/HEAD/POST/PUT/DELETE/TRACE/CONNECT;新增状态码

HTTP/2.0 —— quicker、better、safer 特点:

头部压缩:使用HPACK算法,减少每次传输不必要的头部信息;它的实质就是一种diff算法;客户端和服务端同时维护一张保存头信息的表,并在每次通信后同步更新;首次请求会保存全部字段;之后只需要传输差别信息即可; 2. 二进制分帧:HTTP/2.0的每个请求或响应称为消息,每个消息分为一个或多个帧,采用效率更高的二进制而不是文本格式进行编码传输; 3. 多路复用:同域名下建立一个TCP连接,该连接可以用于多个请求的处理; 4. Server Push:即客户端请求一个页面后,服务端在未接受到后续请求时就返回响应请求,以及通过页面解析发现的客户端后续可能用到的资源,如图片、css、js等;

参考文献

https://juejin.im/post/5d5fe4cb51882569d64b9228https://blog.fundebug.com/2019/03/07/understand-http2-and-http3/HTTP的发展HTTP/1.0 RFC.HTTP/1.1 RFChttps://blog.fundebug.com/2019/03/07/understand-http2-and-http3/
最新回复(0)