2016-01-27 22 views
4

首先,服務器(不是我)跨域請求返回以下標題:製作與認證頭

Access-Control-Allow-Origin: * 
Access-Control-Allow-Credentials: true 

我試圖找出如何請求傳遞給現場與認證令牌。我在本地的apache服務器上運行代碼。

這是我的代碼:

function get_data(){ 
    var url = '$URL'; 
    var x = new XMLHttpRequest(); 
    x.open("GET", url, true) 
    if (x.readyState == 4 && x.status == 200) { 
     var responseText = x.responseText; 
     console.log(responseText) 
     }; 
    x.setRequestHeader("Authentication", "Bearer $TOKEN"); 
    x.withCredentials = true 
    x.send() 
} 

控制檯回報:

的XMLHttpRequest無法加載$ URL。對預檢請求的響應不通過 傳遞訪問控制檢查:否請求的資源上存在「訪問控制 - 允許來源」標頭爲 。 Origin'http://localhost'是 因此不允許訪問。該響應的HTTP狀態代碼403.

在閱讀文檔時,我看到它不允許手動設置標題。當我刪除x.setRequestHeader("Authentication", "Bearer $TOKEN");時,我確實從服務器獲得了一個答案(很明顯是一個驗證錯誤)。那麼我怎麼會將這些信息添加到我的請求中呢?

服務器返回的標題:

Request URL:$serverurl 
Request Method:OPTIONS 
Status Code:403 Forbidden 
Remote Address:$ipaddress 
Response Headers 
view source 
Cache-Control:no-cache 
Connection:close 
Content-Type:text/html 
Request Headers 
view source 
Accept:"*/*" 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4 
Access-Control-Request-Headers:authentication 
Access-Control-Request-Method:GET 
Connection:keep-alive 
Host:$host 
Origin:http://localhost 
Referer:http://localhost/mv.html 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 
+0

請解釋「$ URL」的含義。這是真正的服務器網址的令牌或佔位符嗎? – Roberto

+0

同樣'$ TOKEN' - –

+0

爲了保護隱私,我在此替換了url和token,它們被正確放置在我的代碼中。對於它的價值,我用Python編寫了完全相同的腳本,沒有任何問題。 – wasmachien

回答

-1

實際的GET請求之前,瀏覽器發送一個選項請求,檢查什麼「選擇」有請求(允許的方法,起源等)。

檢查網絡選項卡上的瀏覽器發送的選項請求(預檢)。該請求必須具有適當的響應頭,例如

Access-Control-Allow-Origin: * 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Methods: POST, GET, OPTIONS 

在這裏看到:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Methods

由於服務器發送的選項要求403個狀態頭,這意味着服務器犯規處理OPTIONS請求權,或者乾脆設置403爲您的主機作爲衡量安全。除非改變,否則你無法通過XHR訪問該API。