HTTP header中Access-Control-开头的响应头

  • Post author:
  • Post category:其他

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 credentialsRequest()构造函数中的选项一起工作。必须在双方(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 凭证:

var xhr = new XMLHttpRequest();
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 headersAcceptAccept-LanguageContent-LanguageContent-Type (只限于解析后的值为 application/x-www-form-urlencodedmultipart/form-data  text/plain 三种MIME类型(不包括参数)),它们始终是被支持的,不需要在这个首部特意列出。

如果请求中含有 Access-Control-Request-Headers 字段,那么这个首部是必要的

Header type

Response header

Forbidden header name

no

语法

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

指令

<header-name>

可支持的请求首部名字。请求头会列出所有支持的首部列表,用逗号隔开。

注意以下这些特定的首部是一直允许的:AcceptAccept-LanguageContent-LanguageContent-Type (但只在其值属于 MIME 类型 application/x-www-form-urlencodedmultipart/form-data  text/plain中的一种时)。这些被称作simple headers,你无需特意声明它们。

* (wildcard)

对于没有凭据的请求(没有HTTP cookieHTTP认证信息的请求),值“ *仅作为特殊的通配符值。 在具有凭据的请求中,它被视为没有特殊语义的文字标头名称“ *” 请注意,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-MethodAccess-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

Fetch
Access-Control-Allow-Headers

Living Standard

Initial definition.

 

Access-Control-Allow-Methods

响应首部 Access-Control-Allow-Methods 在对 preflight request.(预检请求)的应答中明确了客户端所要访问的资源允许使用的方法或方法列表。

报头类型

Response header

Forbidden header name

no

语法

Access-Control-Allow-Methods: <method>, <method>, ...

指令

<method>

用逗号隔开的允许使用的 HTTP request methods 列表。

例子

Access-Control-Allow-Methods: POST, GET, OPTIONS

规范

规范

状态

注释

Fetch
Access-Control-Allow-Methods

Living Standard

Initial definition

 

Access-Control-Allow-Origin

Access-Control-Allow-Origin 响应头指定了该响应的资源是否被允许与给定的origin共享。

 

Header type

Response header

Forbidden header name

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

规范

规范

状态

注释

Fetch
Access-Control-Allow-Origin

Living Standard

初始定义

 

Access-Control-Expose-Headers

响应首部 Access-Control-Expose-Headers 列出了哪些首部可以作为响应的一部分暴露给外部。

默认情况下,只有七种 simple response headers (简单响应首部)可以暴露给外部:

如果想要让客户端可以访问到其他的首部信息,可以将它们在 Access-Control-Expose-Headers 里面列出来。

Header type

Response header

Forbidden header name

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-MethodsAccess-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 请求的方法之一,例如GETPOST,或DELETE

例子

Access-Control-Request-Method: POST

 


版权声明:本文为hulinhulin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。