HTTP各版本差异以及HTTPS
HTTP/1.0 HTTP/1.1 HTTP/2.0 HTTP/3 对比
HTTP/1.1
相比于HTTP/1.0,区别:
- 缓存处理:在HTTP/1.0中header主要使用Expires、If-Modified-Since作为缓存判断依据,HTTP/1.1增加Entity tag、If-Match等条件请求,Cache-Control首部。
- 长连接:增加Connection首部,默认开启keep-alive,可以在一个TCP连接上传送多个请求和响应,减少TCP连接建立和关闭的消耗。HTTP/1.0需要使用keep-alive参数来开启。连接可复用,串行运行。
- Host首部,可以在一台物理服务器上存在多个虚拟主机,使用Host指定同一IP地址的不同主机名。HTTP/1.0默认一个IP对应一台服务器,没有此配置。
- 错误通知:新增24个错误状态响应码,如409 Confict表示请求的资源与资源的当前状态发生冲突。
- Range首部,可以请求资源的部分内容,从而实现断点续传。在HTTP/1.0中需要请求整个资源。
HTTP/2.0
- 二进制分帧:将所有传输的信息分割为更小的信息和帧,并对它们采用二进制格式编码
- 多路复用:基于二进制分帧,在同一域名下所有访问都是从同一个TCP连接走,http消息被分解为独立的帧,乱序发送,服务器根据标识符和首部将消息重新组装起来
- header压缩
- 服务端推送
HTTPS
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
-
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。通常,HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信。SSL是独立于HTTP的协议,也可配合其他应用层协议别SMTP等使用。
-
SSL握手:
- 客户端发送请求
- 服务器发送报文,包含SSL版本以及加密组件
- 服务器发送认证报文,包含公开密钥证书
- 服务器发送报文通知客户端,最初阶段的SSL握手协商部分结束
- SSL第一次握手结束后,客户端以Client Key Exchange报文回应,该报文用步骤3中的公开密钥进行加密
- 客户端发送Change Cipher Spec报文,提示服务器之后的报文会采用密钥加密
- 客户端发送Finished报文
- 服务端发送Change Cipher Spec报文
- 服务端发送Finished报文。SSL连接建立完成。之后通信受到SSL保护,从此开始应用层协议通信,即发送HTTP请求。