placeholderHttp Protocol

Http Protocol

HTTP 是一种应用层协议,用于传输Hypermedia Documents,例如 HTML。它最初是为Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他用途,如机器间通信、API访问等。本文对其请求报文、响应报文以及版本进行介绍

HTTP 特点

  • 基于请求/响应模型: 所有的通信都是由客户端发起请求,服务器对请求进行响应
  • 无状态 Stateless: 服务器不会保存客户端的状态信息,每次请求都独立
  • 无连接 Connectionless: 客户端与服务器在完成一次请求-响应后,链接就会断开。但 HTTP/1.1 引入了 Keep-Alive,允许在同一连接中发送多个请求和响应,减少建立连接的开销
Connection: keep-aliveKeep-Alive: timeout=30, max=100

HTTP Message

HTTP 消息分为请求消息和响应消息,两者结构类似,如下图所示,都可以分为三部分:起始行 (Start Line)、头部 (Headers) 和可选的消息体 (Body)。

http_message_0.webp

HTTP Request Message

Request Line

消息的第一行,包含

  • Method: GET, POST, PUT, DELETE, HEAD, OPTIONS, PATCH
  • Request Target: /resource/user?id=10
  • Version: HTTP/1.1
Method
方法是否幂等是否有 body常见用途
GET查询
POST创建
PUT全量更新
PATCH⚠️部分更新
DELETE❌/✅删除
HEAD查元信息
OPTIONS探测能力

Request Headers

请求携带的元数据,每个 Header 占一行,用冒号分隔键和值,常见的 Header 有:

  • Host: 请求的目标,如 example.coma.com:8080, localhost:4000;Host 拼接 Request Target 即可确认请求资源的位置,例如 example.com/index.html

  • User-Agent: 客户端软件信息,如浏览器类型和版本
  • Referer: 来源页面的 URL

  • Content-Type: 请求体的数据类型,如 application/json
  • Content-Length: 请求体的长度(字节数)

  • Authorization: 认证信息,如 Bearer tokenBasic base64encodedcredentials
  • Cookie: 客户端存储的 Cookie 数据

Request Body

可选部分,包含客户端发送给服务器的数据,格式根据 Content-Type 头部指定的类型而定

{	"username": "example",	"password": "password123"}
username=example&password=password123

HTTP Response Message

Status Line

消息的第一行,包含 HTTP 版本、状态码和状态文本,例如 HTTP/1.1 200 OK

HTTP Status Code

    srcset="https://assets.vluv.space/http_protocol_status_code.webp?w=500 500w, https://assets.vluv.space/http_protocol_status_code.webp?w=1200 1200w, https://assets.vluv.space/http_protocol_status_code.webp?w=2000 2000w, https://assets.vluv.space/http_protocol_status_code.webp?w=3000 3000w"
    loading="lazy" decoding="async"
    style="width:100%; object-fit:cover; transition: opacity 0.3s; opacity:0;"
    onload="this.style.opacity=1; this.parentElement.style.backgroundImage='none';"
    alt="http_protocol_status_code.webp"></div>

See more datails HTTP 常见状态码总结(应用层) | JavaGuide

Response Headers

提供响应的元数据,curl 可以指定 -I 参数仅查看响应头部, 例如 curl -I vluv.space

常见的 Header 有:

  • Server: 服务器软件信息,如 Apache/2.4.41 (Ubuntu)

  • Cache-Control[1]: 告诉客户端如何缓存响应,例如 public, private no-cache, max-age=3600
  • Etag: 资源的唯一标识符,用于缓存验证;服务器在响应中返回 ETag,客户端在后续请求中通过 If-None-Match 头部携带该 ETag,服务器根据 ETag 判断资源是否被修改,如果没修改可以不发送响应体,并把状态码设为 304 Not Modified,从而节省带宽

  • Content-Type & Content-Length: 响应体的数据类型和长度

Response Body

可选部分,包含服务器返回的实际数据;格式根据 Content-Type 头部指定的类型而定


  1. What is cache-control? | Cache explained | Cloudflare ↩︎

Author

GnixAij

Posted

2024-07-22

Updated

2026-01-08

License