Access-Control-Allow-Credentials
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
指令
True — 这个头的唯一有效值(区分大小写)。如果不需要credentials,相比将其设为false,请直接忽视这个头例子
允许凭证:
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
响应首部 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
Multiple headers
此示例展示了支持多个标头时的 Access-Control-Allow-Headers 。
Access-Control-Allow-Headers: X-Custom-Header, Upgrade-Insecure-Requests
Example preflight request
让我们看一个涉及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
响应首部 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
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
CORS和缓存
如果服务器未使用“*”,而是指定了一个域,那么为了向客户端表明服务器的返回会根据Origin请求头而有所不同,必须在Vary响应头中包含Origin。
Access-Control-Allow-Origin: https://developer.mozilla.org
Vary: Origin
规范
|
规范 |
状态 |
注释 |
|
Living Standard |
初始定义 |
Access-Control-Expose-Headers
响应首部 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
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
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
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