http请求消息头是什么?http请求头详解
- 云服务器
- 2026-07-07
- 8
HTTP 请求消息头(Request Headers)是 HTTP 协议中用于传递客户端元数据的关键组成部分,它们位于请求行(Request Line)之后,请求体(Request Body)之前,由一系列键值对组成,这些头部信息告诉服务器关于客户端环境、期望的响应格式、身份验证状态以及缓存策略等细节,从而帮助服务器更准确地处理请求并返回合适的资源。
核心功能与分类
HTTP 请求头并非杂乱无章,通常可以分为以下几类通用头部,每类都有其特定的职责:
- 通用头部(General Headers):适用于请求和响应双方,如 Connection、Cache-Control、Date 等。
- 请求头部(Request Headers):提供关于请求内容的详细信息,如 Accept、User-Agent、Authorization 等。
- 实体头部(Entity Headers):描述请求体的元数据,如 Content-Type、Content-Length 等。
常用请求头详解
为了更直观地理解,下表列出了开发中最常遇到的请求头及其作用:
| 请求头名称 | 示例值 | 作用说明 |
|---|---|---|
| Host | www.example.com | 指定请求的目标主机和端口号(HTTP/1.1 必需)。 |
| User-Agent | Mozilla/5.0... | 标识发起请求的客户端软件(浏览器、爬虫、App等),服务器常用于统计或兼容性处理。 |
| Accept | text/html, application/json | 告知服务器客户端能接收的内容类型,服务器据此进行内容协商。 |
| Accept-Language
| zh-CN,zh;q=0.9 | 告知服务器客户端首选的语言,用于多语言网站的内容本地化。 |
| Authorization | Bearer eyJhbG... | 包含身份验证凭据,如 JWT Token 或 Basic Auth 信息。 |
| Content-Type | application/json | 描述请求体的媒体类型,服务器据此解析数据格式。 |
| Content-Length | 256 | 表示请求体的字节长度,用于确定数据边界。 |
| Cookie | session_id=abc123 | 携带客户端存储的 Cookie 信息,用于维持会话状态。 |
| Referer | https://www.google.com/ | 指示当前请求是从哪个页面链接过来的,常用于防盗链或来源统计。 |
| Origin | https://www.example.com | 用于跨域资源共享(CORS),表明请求的来源域名。 |
应用案例:API 接口调用与内容协商
在实际开发中,正确设置请求头是确保前后端交互顺畅的关键,以下通过两个典型场景来展示其应用。

RESTful API 的身份验证与数据提交
假设前端需要向后端发送一个 JSON 格式的用户注册请求,并携带身份验证令牌,请求头必须包含以下关键信息:
- Host: 指定目标服务器。
- Content-Type: 必须设置为 application/json,否则后端无法正确解析 JSON 数据。
-
Authorization: 携带 JWT Token,证明用户已登录。
- Accept: 告知后端期望返回 JSON 格式的数据。
请求示例:

解析:
在此案例中,如果遗漏了 Content-Type,后端可能会默认按表单数据解析,导致 JSON 解析失败;如果遗漏了 Authorization,服务器将返回 401 Unauthorized 错误。
移动端适配与内容协商
当一个移动 App 请求新闻列表时,它可能希望获取轻量级的 JSON 数据,而浏览器用户可能希望获取完整的 HTML 页面,服务器通过 Accept 和 User-Agent 头部来决定返回何种格式的内容。
请求示例(来自 iOS App):
GET /api/news HTTP/1.1 Host: news.example.com User-Agent: MyApp/1.0 (iOS 16.0) Accept: application/json Accept-Language: zh-CN
服务器响应逻辑:
- 服务器检查 User-Agent,识别出这是 iOS App。
- 检查 Accept,发现客户端只接受 application/json。
- 服务器返回 JSON 格式的新闻列表,而不是 HTML 页面。
响应示例:
HTTP/1.1 200 OK Content-Type: application/json Content-Length: 1024 [{"id": 1, "title": "今日新闻", "content": "..."}]
最佳实践与安全建议
- 最小化暴露信息:避免在 User-Agent 或 Referer 中泄露敏感的内部架构信息。
- 强制 HTTPS:在生产环境中,应确保所有包含 Authorization 或 Cookie 的请求都通过 HTTPS 发送,以防止中间人攻破窃取凭证。
- CORS 配置:在进行跨域请求时,确保服务器正确配置 Access-Control-Allow-Origin 等响应头,以配合客户端的 Origin 请求头。
- 缓存控制:对于动态数据,务必设置 Cache-Control: no-cache 或 no-store,防止浏览器缓存导致数据过期。
相关问题与解答
问题 1:为什么在 HTTP/1.1 中 Host 头部是必需的,而在 HTTP/1.0 中不是?
解答:
在 HTTP/1.0 中,每个 TCP 连接通常只对应一个虚拟主机,服务器可以根据 IP 地址和端口号确定请求的目标,随着虚拟主机技术的普及,多个域名可以共享同一个 IP 地址和端口,HTTP/1.1 引入了虚拟主机(Virtual Hosts)的概念,使得服务器能够在同一个 IP 上托管多个网站,客户端必须在请求中明确指定 Host 头部,以便服务器知道用户想要访问的是哪个域名下的资源,如果没有 Host 头部,服务器将无法区分请求应路由到哪个虚拟主机。
问题 2:Referer 和 Origin 头部有什么区别?在什么场景下应该使用哪一个?
解答:
- Referer:表示当前请求是从哪个完整的 URL 链接过来的,它主要用于来源统计、防盗链检查等,由于它包含完整的 URL 路径,可能会泄露敏感的路径信息,因此在隐私保护要求高的场景下可能被浏览器截断或省略。
- Origin:仅包含协议的域名和端口号(https://www.example.com),不包含路径信息,它主要用于跨域资源共享(CORS)的安全检查,当浏览器发起跨域请求时,服务器通过检查 Origin 来决定是否允许该跨域请求,而不是检查 Referer,因为 Origin 更安全且不易被杜撰。
在 CORS 跨域场景中,应依赖 Origin 头部进行安全校验;在传统的页面跳转来源追踪或防盗链场景中,则使用 Referer 头部。
