常见HTTP请求头及其作用

HTTP 请求头(Request Headers)是客户端(如浏览器)向服务器发送请求时附带的信息,用于传递请求的元数据、客户端信息、内容类型等。以下是一些常见的 HTTP 请求头及其作用:
1. Host
- 作用: 指定请求的目标服务器的主机名和端口号。
- 示例:
Host: www.example.com:8080
- 说明: 在 HTTP/1.1 中,
Host
是必需的,因为一个服务器可能托管多个域名。
2. User-Agent
- 作用: 标识客户端(如浏览器、爬虫等)的类型、版本和操作系统信息。
- 示例:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
- 说明: 服务器可以根据
User-Agent
返回不同的内容(如移动端和桌面端的页面)。
3. Accept
- 作用: 指定客户端能够处理的 MIME 类型(如
text/html
,application/json
等)。 - 示例:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
- 说明: 服务器可以根据
Accept
返回最适合客户端的内容类型。
4. Accept-Language
- 作用: 指定客户端偏好的语言。
- 示例:
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
- 说明: 服务器可以根据
Accept-Language
返回不同语言的资源。
5. Accept-Encoding
- 作用: 指定客户端支持的压缩算法(如
gzip
,deflate
等)。 - 示例:
Accept-Encoding: gzip, deflate, br
- 说明: 服务器可以根据
Accept-Encoding
对响应内容进行压缩,以减少传输数据量。
6. Content-Type
- 作用: 指定请求体的 MIME 类型(如
application/json
,application/x-www-form-urlencoded
等)。 - 示例:
Content-Type: application/json
- 说明: 服务器根据
Content-Type
解析请求体的数据格式。
7. Content-Length
- 作用: 指定请求体的字节长度。
- 示例:
Content-Length: 348
- 说明: 用于告知服务器请求体的大小,通常在 POST 或 PUT 请求中使用。
8. Authorization
- 作用: 包含用于身份验证的凭证(如 Bearer Token、Basic Auth 等)。
- 示例:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
- 说明: 用于访问需要身份验证的资源。
9. Cookie
- 作用: 包含客户端存储的 Cookie 信息。
- 示例:
Cookie: sessionId=abc123; userId=456
- 说明: 服务器可以通过
Cookie
识别客户端的状态(如登录状态)。
10. Referer
- 作用: 指示当前请求是从哪个 URL 发起的。
- 示例:
Referer: https://www.example.com/page1
- 说明: 常用于统计来源流量或防止 CSRF 攻击。
11. Cache-Control
- 作用: 控制缓存行为(如
no-cache
,max-age
等)。 - 示例:
Cache-Control: no-cache
- 说明: 客户端或代理服务器可以根据
Cache-Control
决定是否缓存响应。
12. If-Modified-Since
- 作用: 指定资源的最后修改时间,用于条件请求。
- 示例:
If-Modified-Since: Wed, 21 Oct 2023 07:28:00 GMT
- 说明: 如果资源未修改,服务器可以返回
304 Not Modified
,减少数据传输。
13. If-None-Match
- 作用: 指定资源的 ETag,用于条件请求。
- 示例:
If-None-Match: "abc123"
- 说明: 如果资源的 ETag 匹配,服务器可以返回
304 Not Modified
。
14. Origin
- 作用: 指示请求的来源(协议 + 域名 + 端口),用于 CORS 请求。
- 示例:
Origin: https://www.example.com
- 说明: 服务器根据
Origin
决定是否允许跨域请求。
15. Connection
- 作用: 控制连接行为(如
keep-alive
,close
等)。 - 示例:
Connection: keep-alive
- 说明: 用于优化 HTTP 连接的复用。
16. Upgrade-Insecure-Requests
- 作用: 指示客户端希望将 HTTP 请求升级为 HTTPS。
- 示例:
Upgrade-Insecure-Requests: 1
- 说明: 常用于提高安全性。
17. X-Requested-With
- 作用: 标识请求是通过 AJAX 发起的。
- 示例:
X-Requested-With: XMLHttpRequest
- 说明: 服务器可以根据此头判断请求是否为异步请求。
18. DNT (Do Not Track)
- 作用: 指示客户端是否希望禁用跟踪。
- 示例:
DNT: 1
- 说明: 服务器可以根据此头决定是否收集用户数据。
19. Sec-Fetch- 系列头*
- 作用: 提供关于请求的上下文信息(如
Sec-Fetch-Mode
,Sec-Fetch-Site
等)。 - 示例:
Sec-Fetch-Mode: cors
- 说明: 用于增强浏览器的安全策略。
20. Range
- 作用: 指定请求资源的范围(用于断点续传或分块下载)。
- 示例:
Range: bytes=0-499
- 说明: 服务器可以返回部分内容(
206 Partial Content
)。
总结
HTTP 请求头在客户端与服务器的交互中扮演着重要角色,它们不仅传递了请求的元数据,还支持缓存、身份验证、内容协商等功能。合理使用请求头可以优化性能、增强安全性,并改善用户体验。