HTTP的网络协议

305 阅读4分钟

这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

HTTP 是什么

HTTP 全称为 Hyper Text Transfer Protocol,被译为超文本传输协议,是互联网上应用最为广泛的一种网络协议。

HTTP 协议是在 Web 上进行数据交换的基础,是一种“客户端-服务器端”协议。也就是说,请求通常是由像浏览器这样的接受方发起的。一个完整的 Web 文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚本等等。

设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。

HTTP 请求与响应消息

客户端和服务端通过交换各自的消息(与数据流正好相反) 进行交互。

  • 由像浏览器这样的客户端发出的消息叫做请求( requests )
  • 被服务端回应的消息叫做响应( responses )

HTTP基本原理

HTTP 被设计于上20世纪90年代初期,是一种可扩展的协议。它是应用层的协议,通过 TCP,或者是TLS - 加密的TCP连接来发送,理论上任何可靠的传输协议都可以使用。因为其良好的扩展性,时至今日,它不仅被用来传输超文本文档,还用来传输图片、视频或者向服务器发送如 HTML 表单这样的信息。HTTP 还可以根据网页需求,仅获取部分 Web 文档内容更新网页。

rtOQEt.png

HTTP 能控制什么

以下是可以被 HTTP 控制的常见特性:

  • 缓存

  • 开放同源限制认证

  • 基本的认证功能可以直接通过 HTTP 提供,或用 HTTP Cookies 来设置指定的会话。

  • 代理和隧道

    通常情况下,服务器和/或客户端是处于内网的,对外网隐藏真实 IP 地址。因此 HTTP 请求就要通过代理越过这个网络屏障。

  • 会话

HTTP 消息结构

HTTP 请求消息和响应消息具有相似的结构,由以下部分组成︰

  1. start line : 一行起始行用于描述要执行的请求,或者是对应的状态,成功或失败。这个起始行总 是单行的。
  2. HTTP headers : 一个可选的HTTP头集合指明请求或描迹消息正文。
  3. empty line : 一个空行指示所有关于请求的元数据已经发送完毕。
  4. body : 一个可选的包含请求相关数据的正文(比如HTML表单内容),或者响应相关的文档。正文 的大小有起始行的 HTTP 头来指定。

起始行和 HTTP 消息中的 HTTP 头统称为“请求头”,而其有效负载被称为“消息正文”。

HTTP 请求方法

rNKfcF.png

请求头

请求头允许客户端向服务器端传递附加信息。请求头由名称(不区分大小写)后跟一个冒号“:”,冒号后跟具体的值(不带换行符)组成。

根据不同上下文,可将请求头分为:

  1. 通用头:同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头。
  2. 请求头:包含更多有关要获取的资源或客户端本身信息的消息头。
  3. 实体头:包含有关实体主体的更多信息,比如主体长(Content-Length)度或其 MIME 类型。

响应头

响应头允许服务器端向客户端传递附加信息。响应头由名称(不区分大小写)后跟一个冒号“:”,冒号后跟具体的值(不带换行符)组成。

根据不同上下文,可将响应头分为:

  1. 通用头:同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头。
  2. 响应头:包含有关响应的补充信息,如其位置或服务器本身(名称和版本等)的消息头。
  3. 实体头:包含有关实体主体的更多信息,比如主体长(Content-Length)度或其MIME类型。

MIME 类型

MIME 类型全称为 Multipurpose Internet Mail Extensions,被译为多用途 Internet 邮件扩展类型,是一种标准化的方式来表示文档的性质和格式。

浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理文档;因此服务器设置正确以将正确的MIME 类型附加到响应对象的头部是非常重要的。

rNYa9A.png

HTTP / 2.0

HTTP/1.x 报文有一些性能上的缺点:

  • 消息头不像消息主体一样会被压缩。
  • 两个报文之间的 header 通常非常相似,但它们仍然在连接中重复传输。
  • 无法复用。当在同一个服务器打开几个连接时,TCP 热连接比冷连接更加有效。

HTTP/2.0 引入了一个额外的步骤,它将 HTTP/1.x 消息分成帧并嵌入到流(stream)中。