poplark

Hi, 👋 ! 如果您发现有什么错误的地方,点这里可以提 issue,🤝🤝

View My GitHub Profile

19 November 2020

彻底理解 http(x)

by poplark

http

版本 产生时间 内容 发展现状
HTTP/0.9 1991年 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 没有作为正式的标准
HTTP/1.0 1996年 传输内容格式不限制,增加POST、PUT、PATCH、HEAD、OPTIONS、DELETE命令 正式作为标准
HTTP/1.1 1997年 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 2015年前使用最广泛
HTTP/2 2015年 多路复用服务器推送、头信息压缩、二进制协议等 逐渐覆盖市场

疑问点:

  1. http1.1 如何判断某次请求已完成,长连接保持多长时间? - 利用响应头 Content-Length 或 Transfer-Encoding: chunk,最后一块 chunk 长度为 0。
  2. http2 多路复用如何保证请求与返回次序? - 同时发起多个请求,这些请求都有唯一标识,所以可以无序。
  3. http2 server push 时,如何充分利用浏览器中对资源的缓存? -

https

http 与 TCP 之间插入了 SSL/TLS。

流程:

传输方向 内容 解释
C -> S Client Hello 客户端发起握手
S -> C Server Hello 服务器响应握手
S -> C Server Certificates 服务器将证书给到客户端(证书中包含公钥)
S -> C Server Hello Done 服务器握手结束
C -> S Client Key 客户端生成对称加密的密钥(利用证书中的公钥进行加密)并发送给服务器,服务器(利用证书对应的私钥解密)得到对称加密的密钥
C -> S Content 客户利用对称加密的密钥将内容加密发送给服务器

扩展

http3 (quic)

todo

TCP 连接及关闭

三次握手:

C -(SYN seq x)-> S -(SYN-ACK seq y, ack x+1)-> C -(ACK seq x+1, ack y+1)-> S

四次挥手:

C -(FIN seq x)-> S -(ACK seq y, ack x+1)    -> C
                   -(FIN-ACK seq z, ack x+1)-> C -(ACK seq x+1, ack z+1)-> S

参考:

  1. HTTP和HTTPS协议,看一篇就够了
  2. http1.1和http2的主要区别
  3. HTTP协议的Keep-Alive 模式
  4. 从HTTP到HTTP/3的发展简史
tags: 网络