# 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`。
來看下請求的情況:

果然,報錯了,大體的意思就是`Sample-Source`這個請求頭不被允許。
且也產生了Preflight請求,如下:

我們在服務器端設置一下,讓這個請求頭信息可以被接受。
```
add_header 'Access-Control-Allow-Headers' 'Sample-Source';
```
再重新發起請求。

成功了。也產生了兩個請求,其中之一是Preflight請求,還有實際的GET請求。

也返回了真正的頭信息:

跟上面的例子一樣,`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)