Access-Control-Allow-Headers

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

* Some parts of this feature may have varying levels of support.

Access-Control-Allow-Headers 响应标头中用于响应包含了 Access-Control-Request-Headers预检请求,以指示在实际请求中可以使用哪些 HTTP 标头。

如果请求中包含 Access-Control-Request-Headers 标头,那么此响应标头是必需的。

备注: 列入 CORS 白名单的请求标头始终被允许,通常无需在 Access-Control-Allow-Headers 中列出(除非有必要绕过白名单的额外限制)。

标头类型 响应标头
禁止修改的标头

语法

http
Access-Control-Allow-Headers: [<header-name>[, <header-name>]*]
Access-Control-Allow-Headers: *

指令

<header-name>

支持的请求标头名称。此标头可以列出任意数量的请求标头,用逗号分隔。

*(通配符)

*”值仅在无凭证的请求(即不包含 HTTP cookie 或 HTTP 认证信息的请求)中视为特殊的通配符值。在带有凭证的请求中,它被当作字面意义的标头名称“*”处理,不具有特殊语义。请注意,在 Authorization 标头不能被泛化处理,始终需要明确列出。

示例

自定义标头

以下是一个 Access-Control-Allow-Headers 标头可能的样子。它表明服务器支持名为 X-Custom-Header 的自定义标头(除了列入 CORS 白名单的请求标头之外)。

http
Access-Control-Allow-Headers: X-Custom-Header

多个标头

此示例展示了 Access-Control-Allow-Headers 如何指定支持多个标头的情况。

http
Access-Control-Allow-Headers: X-Custom-Header, Upgrade-Insecure-Requests

绕过额外限制

尽管列入 CORS 白名单的请求标头始终被允许,并且通常无需在 Access-Control-Allow-Headers 中列出,但无论如何列出它们都将绕过适用的额外限制

http
Access-Control-Allow-Headers: Accept

预检请求示例

让我们来看一个涉及 Access-Control-Allow-Headers预检请求的示例。

请求

首先看请求。预检请求是一个使用 OPTIONS 方法的请求,它包含预检请求头中的三个部分的某些组合:Access-Control-Request-MethodAccess-Control-Request-HeadersOrigin

下面的预检请求告知服务器,我们想要发送一个 CORS GET 请求,并且该请求携带着 Access-Control-Request-Headers 中列出的标头(即 Content-Typex-requested-with)。

http
OPTIONS /resource/foo
Access-Control-Request-Method: GET
Access-Control-Request-Headers: Content-Type, x-requested-with
Origin: https://foo.bar.org

响应

如果由预检请求指示的 CORS 请求被授权,服务器将使用一个消息响应预检请求,该消息表明允许的源、方法和标头。如下所示,Access-Control-Allow-Headers 包含了所请求的标头信息。

http
HTTP/1.1 200 OK
Content-Length: 0
Connection: keep-alive
Access-Control-Allow-Origin: https://foo.bar.org
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Allow-Headers: Content-Type, x-requested-with
Access-Control-Max-Age: 86400

如果请求的方法不被支持,服务器将响应一个错误。

规范

Specification
Fetch
# http-access-control-allow-headers

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Access-Control-Allow-Headers
Authorization header is not covered by wildcard
Wildcard (*)

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
User must explicitly enable this feature.

参见