簡體   English   中英

有效的訪問控制允許起源響應

[英]Valid Access-Control-Allow-Origin responses

這類似於jquery ajax add身份驗證標頭,因為它與相同的API相關,但這更多地是關於對OPTIONS請求的響應的有效值。

鑒於這種:

$.ajax({
    url: "https://auspost.com.au/api/postcode/search.json?q=clayfield",
    headers: {
        'auth-key': '510839e3-****-****-****-6e04a56e9eb3'
    }
}, function (data) {
    var json = {
    json: JSON.stringify(data)
};
console.log(json);
});

我得到這個回應:

Access-Control-Allow-Headers:accept, auth-key
Access-Control-Allow-Methods:GET
Access-Control-Allow-Origin:
Access-Control-Max-Age:1200
Connection:keep-alive
Content-Length:0
Date:Fri, 13 Feb 2015 03:46:42 GMT
Server:nginx

這會導致錯誤:“ Access-Control-Allow-Origin”標頭包含無效值“”,這表示不允許我的來源訪問。

服務器為Access-Control-Allow-Origin標頭返回一個空字符串(而不是我的來源或*)是否有效? 如果那有效的,我該如何正確驗證我的請求?

“ Access-Control-Allow-Origin”標頭包含無效值,因為它在響應中為空白。 響應必須返回*或原始的實際指定ASCII文本。

W3建議以下內容

資源可以定義一個Access-Control-Allow-Origin標頭。 標頭必須匹配以下ABNF:

Access-Control-Allow-Origin =“訪問控制-允許-起源”“:” ascii-origin | “*”

請參閱: http : //www.w3.org/TR/2008/WD-access-control-20080912/#access-control-allow-origin

正如其他人所建議的那樣,由服務器根據您提供的授權和來源來正確返回這些值。 也許,如果您不嘗試發送服務器值,服務器將不會返回無效響應。

**更新-2015/2/15 **

進一步研究后,我認為問題是服務器設置與目標服務器以及瀏覽器中的jquery / CORS進程結合在一起的。

在服務器級別似乎正在發生的是,如果AUTH-KEY不作為標頭值出現,則服務器被配置為在Access-Control-Allow-Origin響應標頭中返回空字符串。 這不符合標准,但是有些人選擇此作為安全預防措施,以確保不會提出無效的CORS請求。

由於W3( http://www.w3.org/TR/cors/#preflight-request )定義的CORS的飛行前請求資源處理模型,此服務器行為會影響客戶端行為。和您的瀏覽器。

在實際請求中已正確設置請求頭中的AUTH-KEY之前,會生成預檢請求作為OPTION請求(代替GET),以便使服務器有機會告訴客戶端是否CORS策略和身份驗證將允許處理請求。

這些標准還規定,您提供的標頭實際上不會在此預檢請求中發送,而是轉換為稱為“ Access-Control-Request-Headers”的單個標頭值( http://www.w3.org/TR/cors /#http-access-control-request-headers )。 對於通過jquery的特定請求,您將看到以下標頭轉換:

Access-Control-Request-Headers: accept, auth-key

由於auth-key沒有傳遞到服務器,並且如上所述,您的服務器不會對OPTION請求返回“有效”響應,因為此OPTION請求不包含您的實際AUTH-KEY標頭,而是Access-Control-Request-Headers標頭,正是這個空的Access-Control-Response-Headers響應在處理XMLHttpRequest時生成瀏覽器錯誤。

作為解決方案,我將嘗試在首選的服務器端頁面(PHP,.NET等)中設置本地服務器頁面,該頁面將執行簡單的服務器到服務器請求,然后對本地服務器使用ajax請求頁代理來解決上述CORS問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM