在HTTP协议中,请求头(HTTP Headers)用于在客户端(如浏览器或其他HTTP客户端)和服务器之间传递附加的信息。不同的请求头有不同的作用和用途,它们在HTTP请求的不同类型(如GET、POST、PUT等)中的使用方式和意义也有所不同。
下面将详细介绍常见的HTTP请求类型和一些重要的请求头的作用和区别。
HTTP请求类型(方法)
GET
• 功能: 请求从服务器获取资源。
• 特点:
• 请求数据附加在URL后面,长度有限制。
• 只能获取数据,不能修改服务器资源。
• 通常用于读取数据而不会影响服务器状态。
• 典型用法:
GET /path/resource HTTP/1.1
Host: example.com
POST
• 功能: 向服务器提交数据,通常用于创建或修改资源。
• 特点:
• 请求数据包含在请求体中,没有长度限制。
• 可以修改服务器上的资源。
• 支持复杂的数据结构,如表单数据或文件上传。
• 典型用法:
POST /path/resource HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
key1=value1&key2=value2
PUT
• 功能: 向服务器上传或替换资源。
• 特点:
• 请求数据包含在请求体中,用于替换目标资源。
• 如果目标资源不存在,可以创建一个新的资源。
• 通常用于更新资源的完整内容。
• 典型用法:
PUT /path/resource HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 18
{“key”: “newValue”}
DELETE
• 功能: 请求服务器删除指定资源。
• 特点:
• 用于删除资源。
• 通常不会有请求体。
• 典型用法:
DELETE /path/resource HTTP/1.1
Host: example.com
HEAD
• 功能: 请求与GET类似,但只返回响应头,不返回响应体。
• 特点:
• 用于检查资源的元数据(如内容长度、类型等)。
• 常用于测试或获取资源的基本信息而不下载内容。
• 典型用法:
HEAD /path/resource HTTP/1.1
Host: example.com
PATCH
• 功能: 部分更新服务器资源。
• 特点:
• 请求数据包含在请求体中,仅修改资源的部分内容。
• 不同于PUT,PATCH只应用于部分更改。
• 典型用法:
PATCH /path/resource HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 18
{“key”: “newValue”}
OPTIONS
• 功能: 请求服务器返回资源所支持的HTTP方法。
• 特点:
• 不请求资源,只是询问服务器的功能。
• 常用于CORS(跨域资源共享)中的预检请求。
• 典型用法:
OPTIONS /path/resource HTTP/1.1
Host: example.com
常见的HTTP请求头(Headers)
通用头(General Headers)
• Host:
• 指定请求资源所在的服务器主机名和端口。
• 必须在HTTP/1.1请求中包含。
• 例子:
Host: example.com
• 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
• Accept:
• 指定客户端可接受的响应内容类型。
• 例子:
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, /;q=0.8
• Accept-Encoding:
• 指定客户端可接受的内容编码(如压缩方式)。
• 例子:
Accept-Encoding: gzip, deflate, br
• Accept-Language:
• 指定客户端可接受的自然语言。
• 例子:
Accept-Language: en-US,en;q=0.5
请求头(Request Headers)
• Authorization:
• 用于客户端向服务器提供身份验证信息。
• 例子:
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
• Cookie:
• 发送客户端的存储的Cookie信息到服务器。
• 例子:
Cookie: sessionId=abc123; userId=42
• Content-Type:
• 指定请求体的内容类型(如MIME类型)。
• 在POST和PUT请求中非常重要。
• 例子:
Content-Type: application/json
• Content-Length:
• 指定请求体的字节长度。
• 例子:
Content-Length: 348
• Referer:
• 告诉服务器请求的来源页面。
• 例子:
Referer: https://www.example.com/previous-page
特定用法的头(Specific Purpose Headers)
• If-Modified-Since:
• 用于条件请求,只有在指定的时间之后资源被修改过,服务器才会返回资源。
• 例子:
If-Modified-Since: Wed, 21 Oct 2021 07:28:00 GMT
• If-None-Match:
• 用于条件请求,基于资源的ETag值。
• 例子:
If-None-Match: “e1a9-5ab791ed”
• Range:
• 用于请求部分内容,常用于断点续传。
• 例子:
Range: bytes=500-999
• Origin:
• 指示跨域资源请求的来源。
• 例子:
Origin: https://www.example.com
• X-Requested-With:
• 通常用于标识Ajax请求。
• 例子:
X-Requested-With: XMLHttpRequest
四、请求头的使用场景和注意事项
• 缓存控制: 通过头如 Cache-Control、If-Modified-Since 等控制浏览器和服务器之间的缓存机制。
• 安全: 使用 Authorization 和 Cookie 头来管理身份验证和会话,确保通信的安全性。
• 内容协商: 通过 Accept、Accept-Language 等头,客户端可以指示希望以何种格式和语言接收响应。
• 性能优化: 使用 Range 头进行分块下载,可以优化网络资源的使用。
参考资料
• MDN Web Docs - HTTP Headers
• MDN Web Docs - HTTP Request Methods
• RFC 7231 - HTTP/1.1 Semantics and Content