【八股文】HTTP的常见请求头及其作用

377 阅读4分钟

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 请求头是客户端与服务器通信的重要组成部分,用于传递请求的元数据、客户端的能力或偏好等信息。常见的请求头包括:

  • 通用请求头HostUser-AgentAcceptAccept-LanguageAccept-EncodingConnectionCache-Control
  • 请求专用头Content-TypeContent-LengthAuthorizationCookieRefererOrigin
  • 条件请求头If-Modified-SinceIf-None-Match
  • 其他请求头RangeX-Requested-WithDNT

合理使用请求头可以优化请求性能、增强安全性并改善用户体验。