持续学习,稳中求进,努力输出高质量内容。
文章首发个人网站:https://cleaner.love/
获得徽章 9
#挑战每日一条沸点# HTTP 1.1 知识
HTTP 首部字段(通用首部字段):
1、Cache-Control:指定缓存机制(控制缓存的行为)
2、Pragma:用于 HTTP 1.0 向后兼容
3、Connection:管理持久连接
4、Date:HTTP 报文创建的日期和时间
5、Transfer-Encoding:指定报文主体的传输编码方式
6、via:报文经过的中间节点(用来追踪客户端和服务器之间的请求和响应报文的传输路径)
7、Trailer:指定在报文尾部存在的首部字段列表
8、Upgrade:指定客户端和服务器支持的其他协议(用于检测 HTTP 协议及其他协议是否可使用更高的版本进行通信)
9、Warning:用来告知用户一些与缓存相关的问题的警告
#挑战每日一条沸点# HTTP 1.1 知识
请求方法:
1、GET(获取资源)
2、POST(传输实体主体)
3、PUT(传输文件)
4、HEAD(获得报文首部):不返回报文主体部分,用于确认 URI 的有效性及资源更新的日期时间等
5、DELETE(删除文件)
6、OPTIONS(询问支持的方法):用来查询针对 URI 指定的资源支持的方法
7、TRACE(追踪路径):用来查询发送的请求是如何被加工修改的
8、CONNECT(要求用隧道协议连接代理):在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信
#挑战每日一条沸点# HTTP 协议知识
HTTP 1.0 和HTTP 1.1 的区别(细节见图):
1、连接方式:HTTP 1.0 默认使用短连接,如果要使用长连接,需要添加请求头 Connection:Keep-Alive;HTTP 1.1 默认使用长连接。2、Host 头:HTTP 1.0 没有考虑 DNS 允许多个域名绑定到一个 IP 地址的情况,请求资源时,不会加入主机名;HTTP 1.1 增加并强制要求了 Host 头,用于指定请求的目标主机。3、缓存处理:HTTP 1.0 缓存机制简单(Expires、Last-Modified、If-Modified-Since);HTTP 1.1 在 1.0 的基础上,增加了更多的缓存控制策略(Entity tag、Cache-Control、If-Match、If-None-Match)。4、响应状态码:HTTP 1.0 只有 16 种状态码;HTTP 1.1 中加入了更多的状态码。
5、带宽优化:范围请求、断点续传、数据压缩。(细节见图)
#挑战每日一条沸点# HTTP 协议知识
HTTP 3.0(高性能、更安全):1、基于 QUIC 协议,QUIC 是谷歌开发的现代传输协议,建立在 UDP 之上,具有低延时,快速建立连接等特点
2、连接迁移:QUIC 的连接使用“不透明”的连接 ID,不绑定在“IP地址 + 端口”上。从而提高网络切换时连接的持续性和稳定性
3、安全:包含 TLS 1.3,加密所有通信数据;利用 QUIC 的安全性,提供更可靠的安全性
4、HTTP 3.0 没有默认的端口号,需要用 HTTP 2.0 的扩展帧“Alt-Svc”来发现支持 HTTP 3.0 的服务
#挑战每日一条沸点# HTTP 协议知识
HTTP 2.0 (更安全、更高效):
1、2005 年公布,在“语义”上兼容 HTTP/1,保留了请求方法、URI 等概念
2、服务端推送(允许服务器主动向客户端推动数据)、二进制传输(报文格式采用二进制格式,传输更高效)
3、使用虚拟的“流”传输消息,基本(未完全)解决了“对头阻塞”问题,同时实现了多路复用,提高连接的利用率
4、头部压缩(使用 HPACK 算法压缩头部信息,减少重复 Header 的传输,节约带宽)
5、TLS 加密传输(要求至少是 TLS 1.2,而且禁用了很多不安全的密码套件)
#挑战每日一条沸点# HTTP 协议知识
HTTP 1.1 :
1、1997 年 5 月公布,默认使用长连接(减少了 TCP 连接重复建立和断开所造成的额外开销,减轻了服务端的负载)
2、增加了 PUT、DELETE 等请求方法
3、管线化技术:之前发送请求后需等待并收到响应,才能发送下一个请求,管线化可以不用等待响应即可发送下一个请求(凭借长连接)
4、增加缓存管理和控制(Cache-control)、增加并强制要求 Host 头(一个服务器能够用来创建多个 Web 站点,如下图)
5、允许响应数据分块,利于传输大文件
#挑战每日一条沸点# HTTP 协议知识
HTTP 1.0 :
1、1996 年 5 月公布,默认使用非持久连接(每进行一次 HTTP 通信就要重新建立一次 TCP 连接)
2、增加 HEAD、POST 等请求方法;
3、引入了协议版本号的概念,早期的 HTTP 协议并没有版本号
4、 增加了响应状态码,用来标记可能的错误原因;引入了 HTTP Header 的概念,让 HTTP 处理请求和响应更加灵活
5、传输的数据更加丰富,不在局限于文本(凭借 Content-Type Header)