HTTP 的常见请求头及其作用
HTTP 请求头(Request Headers)是客户端(如浏览器)向服务器发送请求时附带的信息,用于描述请求的元数据、客户端的能力或偏好等。这些请求头帮助服务器更好地理解请求并返回适当的响应。以下是常见的 HTTP 请求头及其作用:
1. 通用请求头
这些请求头适用于所有类型的请求(GET、POST 等)。
1.1 Host
-
作用:指定请求的目标服务器的主机名和端口号。
-
示例:
Host: www.example.com -
说明:
- 在 HTTP/1.1 中是必填字段。
- 用于区分同一 IP 地址上的多个虚拟主机。
1.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返回适合客户端的内容(例如移动端或桌面端页面)。
- 服务器可以根据
1.3 Accept
-
作用:指定客户端能够接收的响应内容类型(MIME 类型)。
-
示例:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 -
说明:
- 使用
q参数表示优先级(范围 0~1,1 为最高优先级)。 - 服务器可以根据
Accept返回合适的内容类型。
- 使用
1.4 Accept-Language
-
作用:指定客户端偏好的语言。
-
示例:
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7 -
说明:
- 服务器可以根据
Accept-Language返回适合的语言版本。
- 服务器可以根据
1.5 Accept-Encoding
-
作用:指定客户端能够处理的压缩编码方式。
-
示例:
Accept-Encoding: gzip, deflate, br -
说明:
- 服务器可以根据
Accept-Encoding返回压缩后的响应内容,以减少传输数据量。
- 服务器可以根据
1.6 Connection
-
作用:控制连接的行为。
-
示例:
Connection: keep-alive -
说明:
keep-alive表示客户端希望保持连接(用于 HTTP/1.1 的持久连接)。close表示客户端希望关闭连接。
1.7 Cache-Control
-
作用:控制缓存的行为。
-
示例:
Cache-Control: no-cache -
说明:
no-cache表示客户端不希望使用缓存。max-age=3600表示客户端希望缓存的有效期为 3600 秒。
2. 请求专用头
这些请求头仅适用于特定类型的请求。
2.1 Content-Type
-
作用:指定请求体的 MIME 类型。
-
示例:
Content-Type: application/json -
说明:
- 用于 POST 或 PUT 请求,告诉服务器请求体的格式。
2.2 Content-Length
-
作用:指定请求体的长度(字节数)。
-
示例:
Content-Length: 348 -
说明:
- 用于 POST 或 PUT 请求,帮助服务器正确解析请求体。
2.3 Authorization
-
作用:提供身份验证信息。
-
示例:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... -
说明:
- 用于需要身份验证的请求(例如 OAuth、JWT)。
2.4 Cookie
-
作用:发送客户端存储的 Cookie。
-
示例:
Cookie: sessionId=abc123; username=john -
说明:
- 用于在请求中传递会话信息或其他客户端数据。
2.5 Referer
-
作用:指示当前请求的来源页面 URL。
-
示例:
Referer: https://www.example.com/page1 -
说明:
- 用于服务器分析流量来源或防止 CSRF 攻击。
2.6 Origin
-
作用:指示请求的来源(协议 + 域名 + 端口)。
-
示例:
Origin: https://www.example.com -
说明:
- 主要用于跨域请求(CORS)。
3. 条件请求头
这些请求头用于条件请求,服务器根据条件决定是否返回资源。
3.1 If-Modified-Since
-
作用:如果资源在指定时间后未修改,则返回 304 Not Modified。
-
示例:
If-Modified-Since: Wed, 21 Oct 2023 07:28:00 GMT
3.2 If-None-Match
-
作用:如果资源的 ETag 与指定值不匹配,则返回资源。
-
示例:
If-None-Match: "abc123"
4. 其他常见请求头
4.1 Range
-
作用:请求部分资源(用于断点续传或分块下载)。
-
示例:
Range: bytes=0-499
4.2 X-Requested-With
-
作用:标识请求是否为 AJAX 请求。
-
示例:
X-Requested-With: XMLHttpRequest
4.3 DNT (Do Not Track)
-
作用:指示客户端是否启用“不跟踪”功能。
-
示例:
DNT: 1
5. 总结
HTTP 请求头是客户端与服务器通信的重要组成部分,用于传递请求的元数据、客户端的能力或偏好等信息。常见的请求头包括:
- 通用请求头:
Host、User-Agent、Accept、Accept-Language、Accept-Encoding、Connection、Cache-Control。 - 请求专用头:
Content-Type、Content-Length、Authorization、Cookie、Referer、Origin。 - 条件请求头:
If-Modified-Since、If-None-Match。 - 其他请求头:
Range、X-Requested-With、DNT。
合理使用请求头可以优化请求性能、增强安全性并改善用户体验。