Skip to Content

面试导航 - 程序员面试题库大全 | 前端后端面试真题 | 面试

计算机网络NEWHTTP常见的通用首部字段

在 HTTP 通信中,客户端和服务器通过 HTTP 报文进行交互。HTTP 报文主要分为请求报文(Request Message)和响应报文(Response Message)。它们都由三部分组成:

  1. 起始行(Start Line):描述报文的基本信息

    • 请求报文:包含请求方法(如 GET、POST)、URI 和 HTTP 版本(如 HTTP/1.1、HTTP/2)
    • 响应报文:包含 HTTP 版本、状态码(如 200、404)和状态描述(如 OK、Not Found)
  2. 首部(Headers):提供额外信息,如缓存控制、内容类型等

  3. 消息主体(Body):实际传输的数据内容(可选)

HTTP 协议经历了多个版本的演进(HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3),每个版本对首部字段的支持和处理方式有所不同。不同版本间的主要区别包括连接管理、缓存控制、压缩方式和多路复用等特性。

HTTP 协议的请求和响应报文中必定包含 HTTP 首部。首部为客户端和服务端处理请求和响应提供所需的信息,对于普通用户来说,这些信息大部分无需关注。

在 HTTP(Hypertext Transfer Protocol)中,通用首部字段(General Header Fields) 是指既可以出现在请求报文,也可以出现在响应报文中的首部字段,它们提供关于报文的通用信息,而不是特定于请求或响应的内容。

HTTP 报文由方法、URI、HTTP 首部字段等部分构成。在这些组成部分中,HTTP 首部字段包含的信息最为丰富,同时存在于请求和响应报文内,涵盖了 HTTP 报文相关的各种重要信息。

下面是 HTTP 中常见的通用首部字段的详细讲解:

1. Cache-Control(缓存控制)

用于指定请求和响应的缓存机制,控制缓存的行为。

常见指令

指令作用
no-cache强制请求直接从服务器获取,而不使用缓存。
no-store禁止存储任何缓存,适用于敏感信息(如银行交易)。
max-age=N设置缓存的最大存活时间(单位:秒)。
s-maxage=N仅适用于代理服务器缓存,与 max-age 类似。
public允许任何缓存(包括代理服务器)存储响应内容。
private只能由单个用户缓存,代理服务器不能缓存。
must-revalidate过期后必须向服务器重新验证缓存。
proxy-revalidate代理必须重新验证缓存。
no-transform代理服务器不能对响应进行转换(如压缩)。

📌 示例

Cache-Control: no-cache, no-store, must-revalidate

表示不使用缓存、不存储缓存,并且必须重新验证

2. Connection(连接控制)

用于指定当前连接的控制选项,决定是否保持 TCP 连接。

常见取值

作用
keep-alive维持 TCP 连接,避免每次请求都重新建立连接,提高性能。
close关闭连接,每次请求都需要重新建立连接。

📌 示例

Connection: keep-alive

表示请求后保持连接,以减少 TCP 连接的开销。

3. Date(日期)

指示消息的发送时间,采用 GMT 格式

📌 示例

Date: Sun, 16 Mar 2025 12:34:56 GMT

表示响应发送的时间

4. Pragma(旧版缓存控制)

用于向后兼容 HTTP/1.0,主要用于缓存控制,功能类似 Cache-Control,但仅适用于请求报文

📌 示例

Pragma: no-cache

表示不使用缓存(但 Cache-Control 在 HTTP/1.1 中更推荐使用)。

5. Trailer(用于分块传输)

用于指定在 chunked 传输编码中,哪些首部字段会出现在报文的 Trailer 部分(即数据体之后)。

📌 示例

Trailer: Expires

表示**Expires 首部会出现在数据体之后**。

6. Transfer-Encoding(传输编码)

用于指定报文的数据传输方式,常用于 分块传输(chunked transfer encoding)

常见取值

作用
chunked采用分块传输,数据被分成多个块,每个块包含长度前缀。
compress使用 compress 压缩数据。
deflate使用 deflate 压缩数据。
gzip使用 gzip 压缩数据。

📌 示例

Transfer-Encoding: chunked

表示使用分块传输,适用于无法预先知道响应大小的情况。

7. Upgrade(协议升级)

用于升级连接到更高版本的协议,如 WebSocket 或 HTTP/2。

📌 示例

Upgrade: websocket

表示升级到 WebSocket 协议

8. Via(代理服务器信息)

用于跟踪代理或网关的信息,通常由代理服务器添加,表明请求经过的服务器路径。

📌 示例

Via: 1.1 proxy1, 1.0 proxy2

表示请求经过了 proxy1(HTTP/1.1)和 proxy2(HTTP/1.0) 两个代理。

9. Warning(警告信息)

提供额外的警告信息,通常与缓存相关。

常见格式

Warning: <warn-code> <warn-agent> "<warn-text>" [date]
warn-code作用
110响应可能已过期
111重新验证失败
112代理服务器检测到网络拥塞
199其它警告

📌 示例

Warning: 110 Response is stale

表示响应可能已过期

10. Content-Encoding(内容编码)

用于指示响应内容的编码方式,常用于数据压缩。

常见取值

作用
gzip使用 GZIP 压缩。
deflate使用 DEFLATE 压缩。
br使用 Brotli 压缩(HTTP/2 支持)。

📌 示例

Content-Encoding: gzip

表示响应数据经过 GZIP 压缩

11. Content-Language(内容语言)

指定响应正文的语言,有助于多语言支持。

📌 示例

Content-Language: en-US

表示内容是美式英语

12. Content-Length(内容长度)

用于指示消息体的字节长度(单位:字节)。

📌 示例

Content-Length: 348

表示正文长度为 348 字节

13. Content-Type(内容类型)

用于指明响应的 MIME 类型。

📌 示例

Content-Type: text/html; charset=UTF-8

表示返回 HTML 内容,使用 UTF-8 编码


14. Content-Location(内容地址)

指定资源的可替代位置,与 Location 不同,它不会重定向。

📌 示例

Content-Location: /backup/index.html

表示备选资源路径

15. Content-Range(内容范围)

用于部分内容传输(如断点续传)。

📌 示例

Content-Range: bytes 200-1000/67589

表示返回的内容是第 200-1000 字节,文件总大小为 67589 字节

总结

首部字段作用
Cache-Control控制缓存
Connection连接管理
Date报文发送时间
Pragma兼容旧版缓存控制
Trailer指定 chunked 传输的尾部字段
Transfer-Encoding传输编码
Upgrade连接升级(如 WebSocket)
Via代理服务器信息
Warning警告信息
Content-Encoding响应内容编码
Content-Language内容语言
Content-Length正文长度
Content-Type正文 MIME 类型
Content-Location资源的替代位置
Content-Range部分内容范围

这些通用首部字段适用于HTTP 请求和响应,用于控制连接、缓存、编码、内容信息等。

最后更新于:
Copyright © 2025Moment版权所有粤ICP备2025376666