HTTP总结

254 阅读6分钟

刚好前几天看完《《图解http》》乘着记忆犹新,那就总结一篇关于http的基础知识。

TCP/IP 协议族(各个协议集合的总称)

1. 应用层

应用层决定了向用户提供应用服务时通信的活动。(HTTP、DNS、FTP)等协议是属于这一层

2. 传输层

处于网络连接中的两台计算机之间的数据包。(TCP、UDP)等协议是属于这一层

3. 网络层

网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。(IP协议)

4. 链路层

用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。

什么是HTTP?

HTTP 通常被译为“超文本传输协议” ,是客户端和服务端直接通讯时,遵循的一种规则约定。

HTTP版本变迁记录

1. HTTP0.9

HTTP0.9在1991年由W3C发布,是一个非常简单的版本,只有GET这一种请求方法,而且只有一行ASCII格式的文本。很显然在高速发展的互联网中这些是明显不够用的于是升级到HTTP1.0。

2. HTTP1.0

新增(相关信息后面会简述)

  1. 请求方法
  2. 状态码
  1. 首部信息

···

缺陷

  1. 短链接(部分支持keep-alive)
    通讯完立即断开,造成每次都要重新发起TCP三次握手建立连接, 造成无谓的 TCP 连接建立和断开,增加通信量的开销。
  2. 队头阻塞
    每次请求的时候都会等待前一个链接请求完成以后才开始请求,造成一个等待时间。

3. HTTP1.1

1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 协议版本。当初的标准是 RFC2068,之后发布的修订版 RFC2616 就是当前的最新版本。

新增

  1. 默认开启keep-alive

持久连接旨在建立 1 次 TCP 连接后进行多次请求和响应的交互。

减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

  1. 增加缓存机制

客户端分为两种分别是强缓存、协商缓存。 更多细节

  1. 管道机制( 管线化 )

现在在HTTP/1.1中通过管道机制允许客户端同时发起多个请求,一定程度上缓解了对头阻塞问题,但并没有完全解决。为什么这么说呢,因为服务端是按照接收到请求包的顺序响应的,也就是说如果先后收到请求A和B,即使对A的响应需要一定的时间,而B的响应数据很快可以准备好,也要先响应A,这就造成了队头阻塞。

请求A -> 请求B (不需要等待响应即可发送) --> 响应A -> 响应B (按顺序等待A响应才能响应B)

  1. 请求范围引入range域

首部信息加入范围请求,数据较大的时,可以分段请求内容。

···

缺点

  1. 队头阻塞
  2. 首部信息冗余量大
  1. 请求只能从客户端开始。客户端不可以接收除响应以外的指令
  2. 数据未压缩,导致数据的传输量大

4. HTTP2.0

HTTP/2.0的目标是改善用户在使用Web时的速度体验。

新增

  • 帧(frame)客户端与服务器通过交换帧来通信,帧是基于这个协议通信的最小单位。
  • 流(stream)是连接中的一个虚拟信道,可以承载双向的消息;每个流都有一个唯一的整数标识符
  1. 二进制分帧层(二进制编码)/ 多路复用

HTTP/1.x的解析是基于文本的。二进制只识别0和1的组合。基于这种考虑HTTP/2.0增加了一层二进制分帧层处理这些数据,数据经过二进制分帧层处理之后,会被转换为一个个带有请求 ID 编号的帧,通过协议栈将这些帧发送给服务器处理。服务器以同样处理方式,这样就实现了 HTTP 的多路复用技术

  1. 首部压缩,实体压缩。

通过压缩 HTTP 请求和响应的首部,通信产生的数据包数量和发送的字节数就更少了。

  1. 请求的优先级

HTTP/2.0提供了请求优先级,可以在发送请求时,标上该请求的优先级。

  1. 服务器推送

缺点

  1. 传输层还是会存在tcp数据包级别的阻塞

HTTP首部

HTTP首部字段是构成 HTTP 报文的要素之一。在客户端与服务器之间以 HTTP 协议进行通信的过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外重要信息的作用。 使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。

请求报文响应报文
请求报文.png响应报文.png

上图可以看出,请求报文由请求行(请求方法 主机名 http版本)、首部信息、空行(区分首部和主体)、报文主体(数据)四部分组成。响应报文区别在于状态行(http版本 状态码 短语)、不同的首部信息。

首部字段

首部的信息内容太多,这里只罗列出分类直接引入《图解http》的图具体详情自行查资料总结。

  1. 请求首部

  1. 响应首部

  1. 通用首部

  1. 实体首部

请求方法

关于get和post的区别跳转

  1. GET

获取资源

  1. POST

传输实体主体

  1. PUT

传输文件

  1. DELETE

DELETE 方法用来删除文件,按请求 URI 删除指定的资源。

  1. HEAD

获得报文首部,不返回报文主体内容。

  1. OPTIONS

OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法,用来跨域请求(cors)。

HTTP状态码

一般http的响应状态码分为五类:

  • 1XX Informational(信息性状态码) 接收的请求正在处理
  • 2XX Success(成功状态码) 请求正常处理完毕
  • 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
  • 4XX Client Error(客户端错误状态码) 服务器无法处理请求
  • 5XX Server Error(服务器错误状态码) 服务器处理请求出错

常见的状态码一般有以下几种:

200请求成功
204请求成功,无数据返回
206客户端进行了范围请求,服务器成功响应的 GET 请求
301永久重定向,会根据Location首部重定向
302临时重定向,会根据Location首部重定向
304与协商缓存相关,会根据协商标识去对比缓存
400客户端语法出现错误,不被服务器解析识别
401需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息
404地址不存在,无法在服务器上找到请求的资源
500服务器出现错误

总结

以上就是个人读完《《图解http》》以及网上到处查询资料的总结,有好多内容是没有写出来。