【发布时间】:2011-06-18 12:41:17
【问题描述】:
我的 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 标头对客户端可用。有什么建议吗?
(铬 8)
【问题讨论】:
标签: javascript ajax header cross-domain cors