3.1.2 HTTP Headers

出于安全考虑,有些 headers 只能由用户代理控制(不能以编程的方式修改),包括以下两大类:

  • Forbidden response header name,禁止响应标头名称

    1. Set-Cookie, Set-Cookie2

  • Forbidden request header name,禁止请求标头名词

    1. Accept-Charset

    2. Accept-Encoding

    3. Access-Control-Request-Headers

    4. Access-Control-Request-Method

    5. Connection

    6. Content-Length

    7. Cookie, Cookie2

    8. Date

    9. DNT

    10. Expect

    11. Feature-Policy

    12. Host

    13. Keep-Alive

    14. Origin

    15. Referer

    16. TE

    17. Trailer

    18. Transfer-Encoding

    19. Upgrade

    20. Via

    21. proxy-sec- 开头的

    22. User-Agent 不再被禁止

CORS-safelisted request header

  1. Accept

  2. Accept-Language

  3. Content-Language

  4. Content-Type

当仅包含这些标头(以及满足下面列出的附加要求的值)时,请求不需要在 CORS 的上下文中发送 Preflight request(预检请求)。 我们可以使用 Access-Control-Allow-Headers header 将更多 headers 列入安全列表,并在其中列出上述标头以规避以下附加限制: CORS-safelisted headers 还必须满足以下要求才能成为 CORS-safelisted request header:

  1. 对于 Accept-LanguageContent-Language:值只能由 0-9, A-Z, a-z, 空格, 或 *,-.;= 组成

  2. 对于 AcceptContent-Type:不能包含 CORS-unsafe request header 字节:0x00-0x1F0x09 (HT) 除外), "():<>?@[\]{}, 0x7F (DEL)

  3. 对于 Content-Type:MIME 类型可以是 application/x-www-form-urlencoded, multipart/form-datatext/plain

  4. 对于任何标头:值的长度不能大于 128

CORS-safelisted response header,可以安全地暴露给客户端脚本,只有列入安全列表的响应标头可用于网页。默认情况下,安全列表包括以下响应标头:

  1. Cache-Control

  2. Content-Language

  3. Content-Length(不是原始安全列表响应标头集的一部分)

  4. Content-Type

  5. Expires

  6. Last-Modified

  7. Pragma

  8. 更多:可以使用 response header Access-Control-Expose-Headers 将其它标头添加到安全列表中,它允许服务器指示哪些 response headers 可用于在浏览器中运行的脚本,以响应跨域请求。

Access-Control-Expose-Headers: [<header-name>[, <header-name>]*]
Access-Control-Expose-Headers: *  (对于没有 credentials(凭据)的请求)
Access-Control-Expose-Headers: *, Authorization

response header Access-Control-Allow-Origin 指示响应是否可以和来自给定源的请求代码共享。

Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: <origin> (只能指定一个 origin。如果服务器支持来自多个 origin 的客户端,它必须返回发出请求的特定客户端的 origin)
Access-Control-Allow-Origin: null

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

Last updated