簡體   English   中英

如何從跨域Ajax請求訪問Content-Length標頭?

[英]How can I access the Content-Length header from a cross domain Ajax request?

我的JavaScript應用程序需要使用Ajax下載之前確定資源的長度。 通常這不是問題,您只需發出HEAD請求並提取Content-Length

var xhr = $.ajax({type:"HEAD", url: "http://own-domain/file.html"})
xhr.getResponseHeader("Content-Length")  
// "2195"

但是,資源存儲在客戶端的不同服務器上。 (我控制的服務器)。 所以我使用CORS來制作跨域ajax請求,並設置服務器以響應HEAD請求的預檢請求和帶有自定義標頭的GET / POST請求。

這在主要方面工作得很好,但在使用CORS時,我似乎找不到從HEAD響應中提取Content-Length的方法:

var xhr = $.ajax({type:"HEAD", url: "http://other-domain/file.html"})
xhr.getResponseHeader("Content-Length")
// ERROR: Refused to get unsafe header "Content-Length"

我已經在預檢或響應中嘗試設置各種標題,例如

Access-Control-Expose-Headers: Content-Length

規范似乎建議應該提供它。 但無論我做什么,我似乎都無法向客戶端提供Content-Length標頭。 有什么建議?

(Chrome 8)

我遇到了同樣的問題,直到我在其他地方找到一個線程,教我在我的.htaccess上添加這一行:

Header add Access-Control-Expose-Headers "Content-Length"

然后BOOM,它得到了修復。

我發現所有瀏覽器中的CORS響應頭支持都是錯誤的。 在Chrome / Safari中,我只在getAllResponseHeaders()的結果中看到簡單的響應標頭(http://www.w3.org/TR/cors/#terminology),即使在“Access-Control-Expose-Headers”標頭中也是如此在響應中設置。 在Firefox 3.6.13中,getAllResponseHeaders()不返回任何內容(甚至不是簡單的響應頭)。 作為一種解決方法,我想你可以重載一個簡單的響應頭來包含內容長度,但這可能會導致其他問題,但仍然無法修復Firefox。

暫無
暫無

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

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