1.Access-Control-Allow-Origin
返回的资源需要有一个Access-Control-Allow-Origin头信息,语法如下:
Access-Control-Allow-Origin:<orign> | *
origin参数指定一个允许向该服务器提交请求的URL。对于一个不带有credentials的请求,可以指定为‘*’,表示允许来自所有域的请求。
举个例子,允许来自http://baidu.com的请求,你可以这样指定:
Access-Control-Allow-Origin: http://baidu.com
如果服务器端指定了域名,而不是‘*’,那么响应头的Vary值里必须包含Origin。它告诉客户端:响应是根据请求头里的Origin的值来返回不同的内容的。
2.Access-Control-Expose-Headers
设置浏览器允许访问的服务器的头信息的白名单:
Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header
这样,X-My-Custom-Header和X-Another-Custom-Header这两个头信息,都可以被浏览器得到。
3.Access-Control-Max-Age
这个头告诉我们这次预请求的结果的有效期是多久,如下:
Access-Control-Max-Age:<delta-seconds>
delta-seconds参数表示,允许这个预请求的参数缓存的描述,在此期间,不用发出另一条预检请求。
4.Access-Control-Allow-Credentials
告知客户端,当请求的credentials属性是true的时候,响应是否可以被得到。当它作为预请求的响应的一部分时,它用来告知实际的请求是否使用了credentials。注意简单的GET请求不会预检,所以如果一个请求是为了得到一个带有credentials的资源,而响应里又没有Access-Control-Allow-Credentials头信息,那么说明这个响应被忽略了。
Access-Control-Allow-Credentials:true | false
5.Access-Control-Allow-Methods
指明资源可以被请求的方式有哪些(一个或多个)。这个响应头信息在客户端发出预检请求的时候会被返回。上面有关的例子
Access-Control-Allow-Methods: <method>[, <method>]*
发出预检请求的例子见上,这个例子里就有向客户端发送Access-Control-Allow-Methods响应头信息。
6.Access-Control-Allow-Headers
也是在响应预检请求的时候使用。用来指明在实际的请求中,可以使用哪些自定义HTTP请求头。比如
Access-Control-Allow-Headers:X-PINGOTHER
这样在实际的请求里,请求头信息里就可以有这么一条:
X-PINGOTHER: pingpong
可以有多个自定义HTTP请求头,用逗号分隔:
Access-Control-Allow-Headers:<field-name>[, <field-name>]*
HTTP请求头
这部分内容列出来当浏览器发出跨域请求时可能用到的HTTP请求头。注意这些请求头信息都是在请求服务器的时候已经为你设置好的,当开发者使用跨域的XMLHttpRequest的时候,不需要手动的设置这些头信息
1.Origin
表明发送请求或者预请求的域
Origin: <origin>
参数origin是一个URL,告诉服务器端,请求来自哪里。它不包含任何路径信息,只是服务器名
/Origin的值可以是一个空字符串,这是很有用的。
2.Access-Control-Request-Method
在发出预检请求时带有这个头信息,告诉服务器在实际请求时会使用的请求方式
Access-Control-Request-Method:<method>
3.Access-Control-Request-Headers
在发出预检请求是带有这个头信息,告诉服务器在实际请求时会携带的自定义头信息。如有多个,可以用逗号分开
Access-Control-Request-Headers: <field-name>[,<field-name>]*