# 3. CORS 进阶之设置请求头信息
#### 1. Access-Control-Allow-Headers
在这一篇文章[CORS进阶之Preflight请求(二)](http://www.rails365.net/articles/cors-jin-jie-zhi-preflight-qing-qiu-er)中,有说过,哪些情况下会造成Preflight请求,其中之一,就是下面的情况:
不寻常的请求头,例如不是下面的几种:
- Accept
- Accept-Language
- Content-Language
下面来用浏览器模拟一个任意的请求头。
```
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "http://localhost:8080", true);
xhttp.setRequestHeader('Sample-Source','CORS in Action');
xhttp.send();
```
`setRequestHeader`是设置请求头的意思,在这里,设置了一个头信息`Sample-Source`,它的值是`CORS in Action`。
来看下请求的情况:
![](https://box.kancloud.cn/3231d4d7748a64e9efe185ea074b5002_1250x232.png)
果然,报错了,大体的意思就是`Sample-Source`这个请求头不被允许。
且也产生了Preflight请求,如下:
![](https://box.kancloud.cn/bc05e600edf039001f6b963e86f5aefd_668x486.png)
我们在服务器端设置一下,让这个请求头信息可以被接受。
```
add_header 'Access-Control-Allow-Headers' 'Sample-Source';
```
再重新发起请求。
![](https://box.kancloud.cn/67da84095b1ec527aa4e37e9a0f90a22_664x221.png)
成功了。也产生了两个请求,其中之一是Preflight请求,还有实际的GET请求。
![](https://box.kancloud.cn/4b339fdb0c34f4a26111b668194f83b7_953x258.png)
也返回了真正的头信息:
![](https://box.kancloud.cn/ca47ddb24d799a5d5f79ac57f50a4fdf_736x382.png)
跟上面的例子一样,`Access-Control-Allow-Headers`也有自己的一套推荐写法,如下:
```
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Sample-Source';
```
完结。
下一篇:[CORS进阶之cookie处理(四)](http://www.rails365.net/articles/cors-jin-jie-zhi-cookie-chu-li-si)