HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于客户端与服务器交换信息的应用层协议。浏览器、移动应用或命令行工具可以作为客户端;服务器收到请求后,返回状态、响应头和可能包含页面或数据的响应体。

一次请求由什么组成

HTTP 请求通常包含请求方法、目标路径、协议版本、若干请求头,以及可选的请求体。下面是一个示意例子,域名使用保留的 example.com:

GET /articles HTTP/1.1
Host: example.com
Accept: text/html

GET 表示读取资源;/articles 是请求路径;Host 指明目标主机;Accept 表示客户端能够处理的媒体类型。带有数据的请求(例如提交表单)还可能有请求体和 Content-Type 头。

响应包含状态和内容

服务器响应由状态行、响应头和可选响应体构成。状态码是三位数字,用来表达处理结果的大致类别:

  • 2xx:请求已成功处理,例如 200 OK。
  • 3xx:需要进一步动作,常见于重定向,例如 301 或 302。
  • 4xx:请求端存在问题,例如资源不存在时常见的 404。
  • 5xx:服务器处理请求时发生错误,例如 500。

具体含义还要看所用方法、服务器实现与响应头,不能只凭状态码就推断全部细节。

头部与媒体类型

头部是由名称和值组成的元数据。例如 Content-Type: application/json 表示响应体采用 JSON 媒体类型;Cache-Control 可描述缓存策略。请求头描述客户端偏好或上下文,响应头描述服务器返回内容的属性。

怎样读一条请求

  1. 先看方法和路径,判断客户端要做什么。
  2. 再看请求头,了解内容类型、缓存和认证等上下文。
  3. 查看状态码,判断处理结果的类别。
  4. 最后读响应头和响应体,核对服务器实际返回了什么。
HTTP/1.1、HTTP/2 和 HTTP/3 在传输与消息表达上存在差异;本篇用简化文本帮助理解概念,不代表浏览器网络面板中每个版本的线缆格式。

参考资料