2016-09-29 73 views
0

當我嘗試將Authorzation標頭設置爲如下時,標頭未發送到請求的服務器。使用fetch設置授權標頭的正確方法是什麼?使用提取時未發送授權標頭

let options = { 
    method: 'GET', 
    headers: new Headers({ 
    Authorization: 'Bearer ...' 
    }) 
}; 
fetch('/api/somedata', options).then(function(response) { console.log(response); }; 

編輯

在網絡選項卡上的Chrome開發者工具,我得到了這個請求:

GET /api/somedata HTTP/1.1 
Host: someserver.azurewebsites.net 
Connection: keep-alive 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 
Accept: */* 
Referer: http://localhost:3000/somedata 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 

注意有沒有授權頭被設置。

而且服務器響應:

HTTP/1.1 401 Unauthorized 
Content-Length: 61 
Content-Type: application/json; charset=utf-8 
Server: Microsoft-IIS/8.0 
WWW-Authenticate: Bearer 
X-Powered-By: ASP.NET 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE 
Date: Thu, 29 Sep 2016 03:16:15 GMT 
+0

我無法重現你的問題。我使用與發佈時相同的代碼進行了測試,並且'授權'標頭確實發送到服務器... – Frxstrem

+0

'Authorization'標頭未出現在[禁止標頭名稱]列表中(https://developer.mozilla .org/zh-CN/docs/Glossary/Forbidden_​​header_name),所以沒有理由不適用。您確定*請求是否在沒有授權標頭的情況下發送?如果您使用的是Chrome或Firefox,則可以通過使用F12打開開發人員控制檯並在「網絡」選項卡下查找獲取請求來查看請求標頭。如果它在那裏,服務器端可能有問題。 – Frxstrem

+0

是的,我確定它沒有設置授權標頭。 – user193427

回答

0

我相信你的服務器需要包括以下響應頭:

Access-Control-Allow-Headers: Authorization 
+0

這是否解決了這個問題?我有同樣的問題,但添加這並沒有幫助我。我的問題在這裏http://stackoverflow.com/questions/40900977/custom-request-headers-not-being-sent-with-a-javascript-fetch-request – JasonDavis