Http Protocollqip

Http Protocol

HTTP is an application-layer protocol for transmitting hypermedia documents, such as HTML. It was designed for communication between web browsers and web servers, but it can also be used for other purposes, such as machine-to-machine communication, programmatic access to APIs, and more.

HTTP 特点

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

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 头部指定的类型而定

HTTP
{	"username": "example",	"password": "password123"}

HTTP Response Message

Status Line

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

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 ↩︎

作者

GnixAij

发布于

2024-07-22

更新于

2025-11-07

许可协议

评论