我的JavaScript应用程序需要确定资源的长度, 然后 才能使用Ajax下载资源。通常这不是问题,您只需发出HEAD请求并提取即可Content- Length。
Content- Length
var xhr = $.ajax({type:"HEAD", url: "http://own-domain/file.html"}) xhr.getResponseHeader("Content-Length") // "2195"
但是,资源存储在与客户端不同的服务器上。(我控制的服务器)。因此,我正在使用CORS发出跨域Ajax请求,并已设置服务器以使用自定义标头响应HEAD请求和GET / POST请求的预检请求。
总的来说,这很有效,但是Content-Length在使用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)
我发现所有浏览器中对CORS响应标头的支持都是错误的。在Chrome / Safari中,即使是“ Access-Control-Expose- Headers”标头,我也只能在getAllResponseHeaders()的结果中看到简单的响应标头(http://www.w3.org/TR/cors/#terminology)在响应中设置。在Firefox 3.6.13中,getAllResponseHeaders()不会返回任何内容(甚至不是简单的响应头)。作为一种解决方法,我想您可以重载其中一个简单的响应标头以包含内容长度,但这可能会导致其他问题,并且仍然无法修复Firefox。