Http协议
words: 811 views: time: 3minHttp(HyperText Transfer Protocol)超文本传输协议是一种用于在网络中传输网页、图像、音视频等超媒体数据的客户端-服务器通信协议,构成了万维网数据交换的基础。
报文格式
Http协议的报文格式比较简单,具体的请求方法、请求头和响应状态码,可以参考链接:https://http.dev
1 | // 客户端拼接一个Http请求报文 |
Http版本
HTTP/1.0(1996)
- 默认短连接:服务器处理完成后立即断开TCP连接(发送Fin);
- 无状态:服务器不跟踪每个客户端也不记录过去的请求;
HTTP/1.1(1997)
- 支持Keep-Alive选项,默认长连接,避免建立和释放的开销;
- 通过Content-Length来判断当前请求数据是否已经全部接受;
与HTTP/1.0的主要区别:
- 长连接:减少了建立和关闭连接的消耗和延迟。
- 缓存处理:1.1添加更多的缓存控制策略(如:Entity tag,If-Match);
- 网络连接的优化:1.1支持断点续传;
- 错误状态码的增多:1.1新增了24个错误状态响应码,丰富的错误码更加明确各个状态;
- Host头处理:支持Host头域,不在以IP为请求方标志,Host的引入使得虚拟主机托管成为可能,一台服务器可以承载多个域名网站;
HTTP/2.0(2015)
引入二进制数据帧和流的概念,其中帧对数据进行顺序标识;因为有了序列,服务器可以并行的传输数据。
与HTTP/1.1的主要区别:
- 新的传输格式:2.0使用二进制格式,1.0依然使用基于文本格式;
- 多路复用:连接共享,不同的request可以使用同一个连接传输(最后根据每个request上的id号组合成正常的请求);
- header压缩:由于1.X中header带有大量的信息,并且得重复传输,2.0使用encoder来减少需要传输的hearder大小;
- 服务端推送:同google的SPDUY(1.0的一种升级)一样;
HTTP/3.0(2022)
- 基于QUIC(Quick UDP Internet Connections)协议,默认使用TLS 1.3加密;
- 解决了HTTP/2.0在TCP层面的队头阻塞问题(丢包时不再阻塞所有流);
- 连接迁移:在网络切换(如Wi-Fi切4G)时连接无需重新建立;
redirect & forward
redirect 重定向是两次请求,不能使用request对象来共享数据转发,地址栏会发生变化,可以访问其他站点(服务器)的资源;
forward 转发是一次请求,可以使用request对象共享数据,地址栏路径不变,只能访问当前服务器下的资源;
参考: