Access-Control-Allow-Credentials
响应报头指示的请求的响应是否可以暴露于该页面。当true
值返回时它可以被暴露。
Credentials可以是 cookies, authorization headers 或 TLS client certificates。
当作为对预检请求的响应的一部分使用时,它指示是否可以使用凭证进行实际请求。请注意,简单的GET
请求不是预检的,所以如果请求使用凭证的资源,如果此资源不与资源一起返回,浏览器将忽略该响应,并且不会返回到 Web 内容。
Access-Control-Allow-Credentials
的 header 文件与该XMLHttpRequest.withCredentials
属性或者在提取 API credentials
的Request()
构造函数中的选项一起工作。必须在双方(Access-Control-Allow-Credentials
的 header 和 XHR 或 Fetch 请求中)设置证书,以使 CORS 请求凭证成功。
Header type | Response header |
Forbidden header name | no |
Access-Control-Allow-Credentials:
true
允许凭证:
Access-Control-Allow-Credentials:
true
使用 XHR 凭证:
varxhr =
newXMLHttpRequest();
xhr.open(
'GET',
'http://example.com/',
true);
xhr.withCredentials =
true;
xhr.send(
null);
使用提取凭证:
fetch(url, {
credentials
:
'include'
})
Specification | Status | Comment |
FetchThe definition of 'Access-Control-Allow-Credentials' in that specification. | Living Standard | Initial definition |
响应首部 Access-Control-Allow-Headers
用于 preflight request (预检请求)中,列出了将会在正式请求的 Access-Control-Request-Headers
字段中出现的首部信息。
简单首部,如 simple headers、Accept
、Accept-Language
、Content-Language
、Content-Type
(只限于解析后的值为 application/x-www-form-urlencoded
、
multipart/form-data
或 text/plain
三种
MIME
类型(不包括参数)),它们始终是被支持的,不需要在这个首部特意列出。
如果请求中含有 Access-Control-Request-Headers
字段,那么这个首部是必要的
Header type | |
no |
Access-Control-Allow-Headers: <header-name>[, <header-name>]*
Access-Control-Allow-Headers: *
<header-name>
可支持的请求首部名字。请求头会列出所有支持的首部列表,用逗号隔开。
注意以下这些特定的首部是一直允许的:Accept
, Accept-Language
, Content-Language
, Content-Type
(但只在其值属于 MIME 类型 application/x-www-form-urlencoded
, multipart/form-data
或 text/plain
中的一种时)。这些被称作simple headers,你无需特意声明它们。
*
(wildcard)
对于没有凭据的请求(没有HTTP cookie或HTTP认证信息的请求),值“ *
”仅作为特殊的通配符值。 在具有凭据的请求中,它被视为没有特殊语义的文字标头名称“ *”。 请注意,Authorization
标头不能使用通配符,并且始终需要明确列出。
下面是 Access-Control-Allow-Headers
标头的一个示例。 它表明,除了CORS安全清单列出的请求标头外,对服务器的CORS请求还支持名为X-Custom-Header的自定义标头。
Access-Control-Allow-Headers: X-Custom-Header
此示例展示了支持多个标头时的 Access-Control-Allow-Headers
。
Access-Control-Allow-Headers: X-Custom-Header, Upgrade-Insecure-Requests
让我们看一个涉及Access-Control-Allow-Headers
的预检请求示例。
Request
First, the request. The preflight request is an OPTIONS
request which includes some combination of the three preflight request headers: Access-Control-Request-Method
, Access-Control-Request-Headers
, and Origin
, such as:
OPTIONS /resource/foo
Access-Control-Request-Method: DELETE
Access-Control-Request-Headers: origin, x-requested-with
Origin: https://foo.bar.org
Response
If the server allows CORS requests to use the DELETE
method, it responds with an Access-Control-Allow-Methods
response header, which lists DELETE
along with the other methods it supports:
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-Max-Age: 86400
If the requested method isn't supported, the server will respond with an error.
Specification | Status | Comment |
Living Standard | Initial definition. |
响应首部 Access-Control-Allow-Methods
在对 preflight request.(预检请求)的应答中明确了客户端所要访问的资源允许使用的方法或方法列表。
报头类型 | |
no |
Access-Control-Allow-Methods: <method>, <method>, ...
<method>
用逗号隔开的允许使用的 HTTP request methods 列表。
Access-Control-Allow-Methods: POST, GET, OPTIONS
规范 | 状态 | 注释 |
Living Standard | Initial definition |
Access-Control-Allow-Origin 响应头指定了该响应的资源是否被允许与给定的origin共享。
Header type | |
no |
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: <origin>
*
对于不需具备凭证(credentials)的请求,服务器会以“*
”作为通配符,从而允许所有域都具有访问资源的权限。
<origin>
指定一个可以访问资源的URI。
如需允许所有资源都可以访问您
的资源,您可以如此设置:
Access-Control-Allow-Origin: *
如需允许https://developer.mozilla.org
访问您的资源,您可以设置:
Access-Control-Allow-Origin: https://developer.mozilla.org
如果服务器未使用“*
”,而是指定了一个域,那么为了向客户端表明服务器的返回会根据Origin
请求头而有所不同,必须在Vary
响应头中包含Origin
。
Access-Control-Allow-Origin: https://developer.mozilla.org
Vary: Origin
规范 | 状态 | 注释 |
Living Standard | 初始定义 |
响应首部 Access-Control-Expose-Headers
列出了哪些首部可以作为响应的一部分暴露给外部。
默认情况下,只有七种 simple response headers (简单响应首部)可以暴露给外部:
如果想要让客户端可以访问到其他的首部信息,可以将它们在 Access-Control-Expose-Headers
里面列出来。
Header type | |
no |
Access-Control-Expose-Headers: <header-name>, <header-name>, ...
<header-name>
包含0个或多个除 simple response headers (简单响应首部)之外的首部名称列表,可以暴露给外部,供页面资源使用。
想要暴露一个非简单响应首部,可以这样指定:
Access-Control-Expose-Headers: Content-Length
想要额外暴露自定义的首部,例如 X-Kuma-Revision
,可以指定多个,用逗号隔开:
Access-Control-Expose-Headers: Content-Length, X-Kuma-Revision
Access-Control-Max-Age
响应 header 指示多长时间的结果预检请求(即包含在所述信息Access-Control-Allow-Methods
和Access-Control-Allow-Headers
的 headers )可以被缓存。
Header type | Response header |
Forbidden header name | no |
Access-Control-Max-Age:
<delta-seconds>
<delta-seconds> 结果可以被缓存的最大秒数。
Firefox 在24小时(86400秒)和10分钟(600秒)的 Chromium 上限。Chromium 还指定了5秒的默认值。
值为-1将禁用缓存,需要对所有呼叫进行预检选项检查。
将预检请求的结果缓存10分钟:
Access-Control-Max-Age:
600
Access-Control-Request-Headers
发出请求时报头用于预检请求让服务器知道哪些 HTTP 头的实际请求时将被使用。
Header type | Request header |
Forbidden header name | yes |
Access-Control-Request-Headers: <header-name>, <header-name>, ...
<header-name> 请求中包含的 HTTP 的 header 的逗号分隔列表。
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
Access-Control-Request-Method
发出请求时报头用于预检请求让服务器知道哪些 HTTP 方法的实际请求时将被使用。这个头是必要的,因为预检请求始终是一个OPTIONS
,并且不使用与实际请求相同的方法。
Header type | Request header |
Forbidden header name | yes |
Access-Control-Request-Method:
<method>
<method> HTTP 请求的方法之一,例如GET
,POST
,或DELETE
。
Access-Control-Request-Method: POST