前端必懂!HTTP!

本文深入解析TCP/IP协议,包括三次握手建立连接与四次挥手断开连接的过程,对比HTTP1.x与HTTP2的区别,特别是HTTP2的多路复用机制如何提高效率。

TCP 的基础

  • 三次握手
    • 第一次握手:建立连接. 客户端发送请求报文,SYN位置为1,Sequence Number为x,客户端进入SYN_SEND状态,等待服务器响应
    • 第二次握手: 服务器收到SYN报文,向客户端发送SYN请求,Sequence Number为y,服务器进入SYN_RECV状态
    • 第三次握手:客户端收到服务器的SYN+ACK报文,并向服务器发送ACK报文,两端都进入ESTABLISHED状态
  • 四次挥手
    • 第一次挥手:主机1发送FIN报文,表示要断开连接
    • 第二次挥手:主机2回复ACK报文,主机1进入FIN_WAIT_2
    • 第三次挥手:主机2发送FIN报文,请求关闭连接,主机二进入LAST_ACK状态
    • 第四次挥手:主机1发送ACK报文,进入TIME_WAIT,主机二收到后关闭连接,主机一等待2MSL后关闭连接
  • 可能发生的意外

http2 的多路复用

  • HTTP2用 二进制 格式传输,取代了HTTP1.x的 文本 格式,二进制格式解析更高效。
  • 多路复用代替了HTTP1.x的序列和阻塞机制,所有的相同域名请求都通过 同一个 TCP连接并发完成。
  • 在HTTP1.x中,并发多个请求需要多个TCP连接,浏览器为了控制资源会有6-8个TCP连接都限制。
  • HTTP2中
    • 同域名下所有通信都在 单个 连接上完成,消除了因多个 TCP 连接而带来的延时和内存消耗。
    • 单个连接上可以并行交错的请求和响应,之间 互不干扰

常用头部

通用

  • Connection:允许客户端和服务器指定与请求/响应连接有关的选项,http1.1默认是keep-alive
  • Date:提供日期和时间标志,说明报文是什么时间创建的
  • Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
  • Cache-Control:随报文传送缓存指示

请求

  • Host:给出了接收请求的服务器的主机名和端口号
  • Referer:提供了包含当前请求URI的文档的URL
  • User-Agent:将发起请求的应用程序名称告知服务器
  • Accept:告诉服务器能够发送哪些媒体类型
  • Accept-Encoding:告诉服务器能够发送哪些编码方式
  • Accept-Language:告诉服务器能够发送哪些语言
  • Range:如果服务器支持范围请求,就请求资源的指定范围
  • If-Range:允许对文档的某个范围进行条件请求
  • Authorization:包含了客户端提供给服务器,以便对其自身进行认证的数据
  • Cookie:客户端用它向服务器传送数据

响应

  • Age:(从最初创建开始)响应持续时间
  • Server:服务器应用程序软件的名称和版本
  • Accept-Ranges:对此资源来说,服务器可接受的范围类型
  • Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识

实体

  • Allow:列出了可以对此实体执行的请求方法
  • Location:告知客户端实体实际上位于何处,用于将接收端定向到资源的位置(URL)上去
  • Content-Base:解析主体中的相对URL时使用的基础URL
  • Content-Encoding:对主体执行的任意编码方式
  • Content-Language:理解主体时最适宜使用的自然语言
  • Content-Length:主体的长度
  • Content-Type:这个主体的对象类型
  • ETag:与此实体相关的实体标记
  • Last-Modified:这个实体最后一次被修改的日期和时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值