How can I access the Content-Length header from a cross domain Ajax request?(如何从跨域 Ajax 请求访问 Content-Length 标头?)
问题描述
我的 JavaScript 应用程序需要在使用 Ajax 下载资源之前确定资源的长度.通常这不是问题,您只需发出 HEAD 请求并提取 Content-Length
.
My JavaScript application needs to determine the length of a resource before downloading it with Ajax. Ordinarily this is not a problem, you just make a HEAD request and extract the Content-Length
.
var xhr = $.ajax({type:"HEAD", url: "http://own-domain/file.html"})
xhr.getResponseHeader("Content-Length")
// "2195"
但是,资源存储在与客户端不同的服务器上.(我控制的服务器).所以我使用 CORS 来发出跨域 ajax 请求,并设置服务器来响应 HEAD 请求的预检请求和带有自定义标头的 GET/POST 请求.
However, the resources are stored on a different server to the client. (A server I control). So I'm using CORS to make cross domain ajax requests, and have set up the server to respond to preflighting requests for HEAD requests and GET/POST requests with custom headers.
这在主要方面工作得很好,但在使用 CORS 时,我似乎找不到从 HEAD 响应中提取 Content-Length
的方法:
That is working great in the main, but I can't seem to find a way extract the Content-Length
from the HEAD response when working with CORS:
var xhr = $.ajax({type:"HEAD", url: "http://other-domain/file.html"})
xhr.getResponseHeader("Content-Length")
// ERROR: Refused to get unsafe header "Content-Length"
我已经尝试在预检或响应中设置各种标头,例如
I have experimented with setting various headers in the preflighting or in the response, such as
Access-Control-Expose-Headers: Content-Length
规范似乎建议应该使其可用.但无论我做什么,我似乎都无法使 Content-Length 标头对客户端可用.有什么建议吗?
which the specification seems to suggest should make it available. But no matter what I do, I can't seem to make the Content-Length header available to the client. Any suggestions?
(铬 8)
推荐答案
我发现所有浏览器对 CORS 响应标头的支持都存在问题.在 Chrome/Safari 中,我只在 getAllResponseHeaders() 的结果中看到简单的响应标头 (http://www.w3.org/TR/cors/#terminology),即使是Access-Control-Expose-Headers"标头在响应中设置.在 Firefox 3.6.13 中, getAllResponseHeaders() 不返回任何内容(甚至不返回简单的响应标头).作为一种解决方法,我想您可以重载一个简单的响应标头以包含内容长度,但这可能会导致其他问题,并且仍然无法修复 Firefox.
I've found CORS response header support in all browsers to be buggy. In Chrome/Safari, I only see simple response headers (http://www.w3.org/TR/cors/#terminology) in the result of getAllResponseHeaders(), even when the "Access-Control-Expose-Headers" header is set in the response. And in Firefox 3.6.13, getAllResponseHeaders() doesn't return anything (not even simple response headers). As a workaround, I suppose you could overload one of the simple response headers to include the content-length, but that may cause other issues, and still wouldn't fix Firefox.
这篇关于如何从跨域 Ajax 请求访问 Content-Length 标头?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何从跨域 Ajax 请求访问 Content-Length 标头?
基础教程推荐
- 在for循环中使用setTimeout 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 动态更新多个选择框 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06