1. HTTP协议简介
什么是HTTP
HTTP:超文本传输协议(Hypertext Transfer Protocol) 是用于获取 HTML 文档等资源的协议。 它是 Web 上任何数据交换的基础,它是一种客户端-服务器协议,位于应用程序层的顶部,基于TCP协议。
客户端和服务器通过交换单个消息(而不是数据流)进行通信。 客户端(通常是 Web 浏览器)发送的消息称为请求,服务器作为应答发送的消息称为响应。
HTTP 是简单可扩展的。HTTP通常被设计为简单和人类可读的,HTTP / 1.0中引入的HTTP标头使该协议易于扩展和试验。 新功能甚至可以通过客户端和服务器之间关于新标头语义的简单协议来引入。
HTTP 是无状态的,在同一连接上连续执行的两个请求之间没有链接。但不是无会话的。HTTP cookie允许使用有状态会话。 使用标头可扩展性,HTTP Cookie 将添加到工作流中,从而允许在每个 HTTP 请求上创建会话以共享相同的上下文或相同的状态。
2. HTTP协议的基本结构与发展历程
2.1.发展历程
2.2 协议结构
2.2.1 报文
2.3 HTTP/2 – 提高性能的协议(更快、更稳定、更简单)
HTTP/2 协议与 HTTP/1.1 的区别:
- 它是一个二进制协议,而不是文本协议。无法手动读取和创建它。尽管存在此障碍,但它仍允许实施改进的优化技术。
- 这是一个多路复用协议。并行请求可以通过同一连接发出,从而消除了 HTTP/1.x 协议的约束。
- 它压缩标头。由于这些请求在一组请求中通常是相似的,因此这消除了传输数据的重复和开销。
- 它允许服务器通过称为服务器推送的机制在客户端缓存中填充数据。
HTTP / 2不需要更改网站和应用程序。要使用它,只需要与最新浏览器通信的最新服务器。只需要一组有限的组来触发采用,并且随着旧版浏览器和服务器版本的更新,使用量自然会增加,而无需 Web 开发人员进行大量工作。
2.4 HTTPS
3. 常见场景中的HTTP协议应用
3.1 静态协议
3.2 登录
4. HTTP 消息
4.1 概念
HTTP 消息是在服务器和客户端之间交换数据的方式。有两种类型的消息:客户端发送的请求以在服务器上触发操作,以及响应,即来自服务器的应答。
HTTP 消息由以 ASCII 编码的文本信息组成,跨越多行。Web 开发人员或网站管理员很少自己制作这些文本 HTTP 消息:软件、Web 浏览器、代理或 Web 服务器执行此操作。它们通过配置文件(用于代理或服务器)、API(用于浏览器)或其他接口提供 HTTP 消息。
HTTP/2 二进制成帧机制的设计不需要对应用的 API 或配置文件进行任何更改:它对用户大致透明。
HTTP 请求和响应具有类似的结构,由以下部分组成:
- 描述要实现的请求或其成功或失败状态的起始行。此起始线始终是单行。
- 一组可选的 HTTP 标头,用于指定请求或描述消息中包含的正文。
- 已发送一个空行,指示请求的所有元信息。
- 包含与请求关联的数据(如 HTML 表单的内容)或与响应关联的文档的可选正文。正文的存在及其大小由起始行和 HTTP 标头指定。
HTTP 消息的起始行和 HTTP 标头统称为请求的头部,而其有效负载称为正文。
4.2 HTTP 请求“起跑线”包含三个元素:
-
一个 HTTP 方法、一个动词(如
GET、PUT或POST)或一个名词(如HEAD或OPTIONS),用于描述要执行的操作。例如,指示应提取资源或表示将数据推送到服务器(创建或修改资源,或生成要发回的临时文档)。GET、POST -
请求目标(通常是 URL)或协议、端口和域的绝对路径通常以请求上下文为特征。此请求目标的格式因不同的 HTTP 方法而异。它可以是
-
绝对路径,最终后跟 a 和查询字符串。这是最常见的形式,称为原点形式,与 、、 和 方法一起使用。
'?'``GET``POST``HEAD``OPTIONSPOST / HTTP/1.1GET /background.png HTTP/1.0HEAD /test.html?query=alibaba HTTP/1.1OPTIONS /anypage.html HTTP/1.0
-
完整的 URL(称为绝对形式)通常在连接到代理时使用。
GET``GET https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1 -
URL 的授权组件,由域名和端口(以 为前缀)组成,称为颁发机构表单。它仅在设置 HTTP 隧道时使用。
':'``CONNECT``CONNECT developer.mozilla.org:80 HTTP/1.1 -
星号形式,一个简单的星号 () 与 一起使用,表示整个服务器。
'*'``OPTIONS``OPTIONS * HTTP/1.1
-
-
HTTP 版本,它定义其余消息的结构,充当用于响应的预期版本的指示器。
4.3HTTP 响应
状态行
HTTP 响应的起始行(称为状态行)包含以下信息:
- 协议版本,通常为 .
HTTP/1.1 - 指示请求成功或失败的状态代码。常见状态代码为
200、404或302 - 状态文本。状态代码的简短、纯信息性文本描述,可帮助用户理解 HTTP 消息。
典型的状态行如下所示:。HTTP/1.1 404 Not Found
头
响应的 HTTP 标头遵循与任何其他标头相同的结构:不区分大小写的字符串后跟冒号 () 和一个值,其结构取决于标头的类型。整个标题(包括其值)显示为一行。':'
响应中可以显示许多不同的标头。这些可以分为几组:
- 常规标头(如
Via)适用于整个邮件。 - 响应标头(如“
变化”和“接受范围”)提供有关不适合状态行的服务器的其他信息。 - 描述消息数据的原始格式和应用的任何编码的表示标头(仅当消息具有正文时才存在)。
身体
响应的最后一部分是正文。并非所有响应都有一个:状态代码足以回答请求而无需相应有效负载的响应通常不会。
主体大致可分为三类:
- 单资源正文,由已知长度的单个文件组成,由两个标头定义:
内容类型和内容长度。 - 单资源正文,由长度未知的单个文件组成,由
“传输编码”设置为 的块编码。chunked - 多资源机构,由一个多部分机构组成,每个机构包含不同的信息部分。这些是相对罕见的。