2011-04-28 30 views
37

一個簡單的GET請求,沒有自定義頭部。響應按預期返回。正文中的數據是可訪問的,但不是標題。跨域資源共享GET:'拒絕獲取不安全的頭部'etag「'來自響應

當我嘗試訪問 「ETAG」 頭,瀏覽器產生一個異常:

不肯不安全頭 「的etag」

的Chrome,Safari和Firefox都具有相同的行爲。我沒有在IE上測試它。

我在這裏錯過了什麼?

+0

UPDATE:只有以下標頭是訪問: - 過期 - 上次修改 - 內容語言 - 緩存控制 - Content-Type的 – Mohamed 2011-04-28 19:00:01

+0

如果有人想知道什麼時候被這個固定的,我發現[webkit]中的錯誤(https://bugs.webkit.org/show_bug.cgi?id=41210)和[chromium](https://code.google.com/p/chromium/issues/detail?id= 87338&可以= 1&q =存取控制功能暴露-集管和colspec = ID%20Pri%20M%20Iteration%20ReleaseBlock%的20Cr%20Status%20Owner%20Summary%20OS%20Modified)。 – rvignacio 2014-08-06 13:20:43

回答

66

只有簡單的響應頭暴露。簡單的響應標題被定義爲hereETag不是一個簡單的響應標題。如果要公開非簡單的標題,你需要設置Access-Control-Expose-Headers頭,就像這樣:

Access-Control-Expose-Headers: ETag 

但是請注意,我注意到在Chrome,Safari和Firefox的漏洞,以防止非簡單的頭從正確暴露。現在可能會修復這個問題,我不確定。

你不應該需要做的預檢要求,因爲飛行前只需要非GET/POST HTTP方法還是非簡單請求標題(和你是問有關響應頭)。

+3

我確認對Access-Control-Expose-Headers標題的支持是有問題的。 – Mohamed 2011-05-03 18:06:12

+2

我想知道是什麼讓Last-Modified變得簡單而不是ETag。他們不應該支持緩存優化的相同目的嗎? – Mohamed 2011-05-03 18:07:34

+1

你說得很好。我不知道它背後的動機,但這是一個提到它的線索(我還沒有讀過它):http://lists.w3.org/Archives/Public/public-webapps/2010AprJun/0038。 html – monsur 2011-05-05 02:30:56

1

你有沒有試過AJAX 2.0(跨域共享)是最近才由W3C帶出了一個方法:http://www.w3.org/TR/XMLHttpRequest2/#ref-cors

也有這樣做的另一種方式,這就是所謂的JSON-P,它就像一個JSON請求,但是您可以將其用於跨域:http://en.wikipedia.org/wiki/JSONP

如果未正確設置,兩者都可能對網站所有者非常危險。所以使用它時要小心。

[PS] 不知道這是否會幫助:使用CORS時http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

+1

你讀過這個問題的標題嗎?它應該是科爾 – mplungjan 2011-04-28 18:08:15

+0

糟糕,我真的沒有注意到,如果我是誠實的。但仍然可以使用JSONP – DarkMantis 2011-04-28 18:09:38

+0

當然,但知道發生了什麼很有趣。尤其是因爲JSONP在處理錯誤時很糟糕 – mplungjan 2011-04-28 18:11:02