文章总结: 本文详细介绍了HTTP请求头和响应头的各种字段及其用途,包括基础信息头、内容协商头、连接与缓存控制头、安全与身份验证头等。文章提供了完整的请求和响应示例,以及开发实践要点,强调了正确设置安全头如CSP、HSTS、X-Frame-Options的重要性,并给出了性能优化和API设计的实用建议,是Web开发者和安全工程师的重要参考资料。
综合评分: 89
文章分类: WEB安全,网络安全,应用安全,安全建设
请求头和响应头详细讲解
原创
Titans
骏之安科技知识库
2025年11月17日 07:00
北京
HTTP 头字段概述
HTTP 头字段是 HTTP 请求和响应的元数据,它们定义了客户端和服务器如何处理传输的数据。头字段是键值对的形式,不包含实际的应用数据(那是请求体/响应体的作用)。
请求头详解
请求头由客户端发送,告诉服务器关于客户端环境、期望的响应格式、缓存策略、认证信息等。
1. 基础信息头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Host | www.example.com | 必需字段 (HTTP/1.1)。指定请求的目标域名和端口。服务器用它来区分虚拟主机。 |
| User-Agent | Mozilla/5.0 (Windows NT 10.0...) Chrome/140.0.0.0 | 标识客户端软件(浏览器/爬虫/API客户端)的详细信息。用于统计、兼容性处理和反爬虫。 |
| Accept | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 | 告诉服务器客户端能够处理的响应内容类型(MIME类型)。q 参数表示权重(0-1)。 |
2. 内容协商头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Accept-Language | zh-CN,zh;q=0.9,en;q=0.8 | 客户端偏好的自然语言列表。服务器可根据此返回对应语言的页面。 |
| Accept-Encoding | gzip, deflate, br, zstd | 客户端支持的内容压缩算法。服务器可选择其中一种压缩响应体,减少传输大小。 |
| Accept-Charset | utf-8, iso-8859-1;q=0.5 | 客户端支持的字符集(现代浏览器通常省略,默认 UTF-8)。 |
3. 连接与缓存控制头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Connection | keep-alive | 控制网络连接是否在请求完成后关闭。keep-alive 表示保持连接以复用,提高性能。 |
| Cache-Control | max-age=0 , no-cache, no-store | 精细控制缓存机制 : max-age=0:缓存但立即过期 no-cache:使用缓存前必须验证 no-store:不存储任何缓存 |
4. 请求体相关头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Content-Type | application/x-www-form-urlencoded``application/json``multipart/form-data | 定义请求体的格式 : – x-www-form-urlencoded:简单表单数据 – json:JSON 格式数据 – form-data:文件上传 |
| Content-Length | 389 | 请求体的字节大小。对于 POST/PUT 请求很重要。 |
| Content-Encoding | gzip | 请求体使用的压缩编码(较少在请求中使用)。 |
5. 安全与身份验证头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Authorization | Bearer eyJhbGciOiJIUzI1NiIs...``Basic dXNlcjpwYXNz | 包含认证凭证: – Bearer:JWT token – Basic:Base64编码的用户名:密码 |
| Cookie | sessionId=abc123; userId=456 | 之前服务器设置的 Cookie 数据,用于维持会话状态。 |
| Referer | https://www.example.com/login | 发起请求的源页面 URL。用于分析流量来源,但可能因隐私被屏蔽。 |
6. 现代安全头(Fetch Metadata)
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Origin | https://www.example.com | 发起请求的源(协议+域名+端口)。用于 CORS 和 CSRF 保护。 |
| Sec-Fetch- * | Sec-Fetch-Site: same-origin``Sec-Fetch-Mode: navigate | 提供请求上下文,帮助服务器防范 CSRF 等攻击: – Site:请求来源与目标的关系 – Mode:请求模式(navigate/cors/no-cors) |
响应头详解
响应头由服务器发送,告诉客户端关于服务器信息、响应数据特性、缓存指令、安全策略等。
1. 基础信息头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Server | nginx/1.18.0``Apache/2.4.41 | 服务器软件的名称和版本。有时出于安全考虑会隐藏或修改。 |
| Date | Mon, 20 May 2024 08:00:00 GMT | 响应生成的日期和时间(GMT)。 |
2. 响应体相关头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Content-Type | text/html; charset=utf-8``application/json | 定义响应体的格式和编码 : – text/html:HTML 页面 – application/json:JSON 数据 – charset 指定字符编码 |
| Content-Length | 1529 | 响应体的字节大小。浏览器据此显示下载进度。 |
| Content-Encoding | gzip | 响应体使用的压缩算法。浏览器会自动解压。 |
| Content-Disposition | attachment; filename="report.pdf" | 指示浏览器将响应体作为文件下载,并建议文件名。 |
3. 缓存控制头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Cache-Control | max-age=3600, public``no-cache, must-revalidate | 服务器端的缓存指令 : – max-age=3600:缓存有效期为3600秒 – public:允许任何缓存存储 – private:仅允许浏览器缓存 |
| Expires | Mon, 20 May 2024 12:00:00 GMT | 过时的缓存控制 ,指定缓存过期的具体时间。 |
| ETag | "33a64df551425fcc55e4d42a148795d9f25f89d4" | 响应资源的版本标识符。用于缓存验证(If-None-Match)。 |
| Last-Modified | Mon, 20 May 2024 07:30:00 GMT | 资源最后修改时间。用于缓存验证(If-Modified-Since)。 |
4. 连接控制头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Connection | keep-alive , close | 与请求头中的 Connection 对应,服务器确认连接策略。 |
| Keep-Alive | timeout=5, max=1000 | 当 Connection 为 keep-alive 时,指定超时时间和最大请求数。 |
5. 安全与权限头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Set-Cookie | sessionId=abc123; Path=/; HttpOnly; Secure | 在客户端设置 Cookie : – Path=/:Cookie 的有效路径 – HttpOnly:禁止 JavaScript 访问 – Secure:仅通过 HTTPS 传输 |
| Strict-Transport-Security | max-age=31536000; includeSubDomains | HSTS :强制浏览器在指定时间内使用 HTTPS 访问。 |
| Content-Security-Policy | default-src 'self' | CSP :定义允许加载资源的来源,防范 XSS 攻击。 |
| X-Frame-Options | DENY , SAMEORIGIN | 控制页面是否可以在 <frame>, <iframe> 中显示,防范点击劫持。 |
| X-Content-Type-Options | nosniff | 阻止浏览器对响应内容进行 MIME 类型嗅探。 |
6. CORS(跨域资源共享)头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Access-Control-Allow-Origin | *``https://www.example.com | 允许跨域访问的源 : – *:允许所有域 – 具体域名:允许特定域 |
| Access-Control-Allow-Methods | GET, POST, PUT, DELETE | 允许跨域请求使用的 HTTP 方法。 |
| Access-Control-Allow-Headers | Content-Type, Authorization | 允许跨域请求携带的头部字段。 |
| Access-Control-Allow-Credentials | true | 是否允许跨域请求携带 Cookie 等认证信息。 |
7. 重定向头
| 头字段 | 示例值 | 详细解释 |
| — | — | — |
| Location | https://www.example.com/new-page | 在 3xx 重定向响应中,指定重定向的目标 URL。 |
完整示例分析
请求示例
POST /api/login HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 56
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Cookie: session=abc123
{"username": "user", "password": "pass"}
解读:这是一个 JSON API 登录请求,携带了 Bearer Token 和会话 Cookie。
响应示例
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 45
Cache-Control: no-store
Set-Cookie: session=def456; Path=/; HttpOnly; Secure
X-Content-Type-Options: nosniff
{"status": "success", "token": "new_token_here"}
解读:服务器返回成功,设置了新的安全 Cookie,并指示不要缓存敏感数据。
HTTP请求结构ASCII图
HTTP响应结构ASCII图
┌─────────────────────────────────────────────────────────────────────┐
│ HTTP响应结构 │
├─────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 状态行 (Status Line) │ │
│ │ HTTP/1.1 200 OK │ │
│ │ HTTP/1.1 404 Not Found │ │
│ │ HTTP/1.1 500 Internal Server Error │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 响应头 (Response Headers) │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ 基础信息头 │ │ │
│ │ │ Server: nginx/1.18.0 │ │ │
│ │ │ Date: Mon, 20 May 2024 08:00:00 GMT │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ 内容类型头 │ │ │
│ │ │ Content-Type: text/html; charset=utf-8 │ │ │
│ │ │ Content-Length: 1529 │ │ │
│ │ │ Content-Encoding: gzip │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ 缓存控制头 │ │ │
│ │ │ Cache-Control: max-age=3600, public │ │ │
│ │ │ ETag: "33a64df551425fcc55e4d42a148795d9" │ │ │
│ │ │ Last-Modified: Mon, 20 May 2024 07:30:00 GMT │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ 安全与CORS头 │ │ │
│ │ │ Set-Cookie: session=abc123; HttpOnly; Secure │ │ │
│ │ │ Strict-Transport-Security: max-age=31536000 │ │ │
│ │ │ Access-Control-Allow-Origin: * │ │ │
│ │ │ X-Frame-Options: DENY │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 空行 (Blank Line) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 响应体 (Response Body) │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ HTML内容示例: │ │ │
│ │ │ <!DOCTYPE html> │ │ │
│ │ │ <html> │ │ │
│ │ │ <head><title>Welcome</title></head> │ │ │
│ │ │ <body><h1>Hello World!</h1></body> │ │ │
│ │ │ </html> │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ JSON内容示例: │ │ │
│ │ │ { │ │ │
│ │ │ "status": "success", │ │ │
│ │ │ "data": { ... }, │ │ │
│ │ │ "message": "操作成功" │ │ │
│ │ │ } │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ 文件下载示例: │ │ │
│ │ │ (二进制数据 - PDF, 图片, 压缩包等) │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
开发实践要点
- 1. 安全性:正确设置 CSP、HSTS、X-Frame-Options 等安全头
- 2. 性能:合理使用 Cache-Control 和压缩(Content-Encoding)
- 3. API 设计:为 API 响应设置合适的 Content-Type 和 CORS 头
- 4. 调试:使用浏览器开发者工具的 Network 面板查看和分析头部
理解这些头部字段的含义和用法,是进行 Web 开发、API 设计和性能优化的基础。
–END–
觉得不错,可以关注,点赞,转发,如果需要技术援助,可以联系我们,期待您的莅临
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:骏之安科技知识库 Titans《请求头和响应头详细讲解》