jQuery跨域请求响应头

时间:2012-02-28 16:02:00

标签: jquery ajax cross-domain response-headers

我正在用html数据类型制作跨域ajax请求。 他们包括

时工作正常
Access-Control-Allow-Origin

来自服务器的响应。问题是我需要从服务器的响应中获取某些标头,无论我做什么,除“内容类型”之外的响应标头返回null。

jQuery执行请求,检索包含标题的响应(我可以从流量中看到它),但它不解析它。

我尝试过使用

crossDomain: true

没有帮助。以下是服务器的示例响应。

Access-Control-Allow-Origin:*
Cache-Control:private
Content-Encoding:gzip
Content-Length:514
Content-Type:text/html; charset=utf-8 
X-MYRESPONSEHEADER:1

如果请求和响应文档在同一台服务器上

 success: function (data, status, xhr) {
        totalRows = xhr.getResponseHeader("X-MYRESPONSEHEADER");

工作正常。我还尝试将$ .ajax分配给像

这样的变量
var jQxhr = $.ajax(.....

我不明白为什么它不会被解析,因为jQuery实际发出请求并获得响应

有什么想法吗?我错过了什么吗?

更新或龙的评论

发送到请求的标头

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-MYRESPONSEHEADER
Access-Control-Allow-Methods: POST
Access-Control-Allow-Methods: GET
X-MYRESPONSEHEADER: 24
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 29 Feb 2012 11:34:21 GMT

内容长度:514

4 个答案:

答案 0 :(得分:2)

您需要在服务器响应Access-Control-Allow-Headers中添加另一个特定于CORS的标头。在这种情况下,

Access-Control-Allow-Headers: X-MYRESPONSEHEADER

参考:https://developer.mozilla.org/en/http_access_control#Access-Control-Allow-Headers

答案 1 :(得分:2)

如果你正在使用aws s3(我认为这是适用的),问题可能是缺少CORS配置标记。我遇到了类似的问题而失踪了。这是我完成的配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>http://localhost:3000</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
        <ExposeHeader>*</ExposeHeader>
    </CORSRule>
</CORSConfiguration>

AllowedHeader设置 Access-Control-Request-Headers 标头,ExposeHeader设置 Access-Control-Expose-Headers 标头,否则浏览器不允许使用javascript返回的标题。

答案 2 :(得分:2)

要在服务器的响应中读取除content-type之外的标头,服务器必须提供Access-Control-Expose-Headers,例如:

Access-Control-Expose-Headers: X-MYRESPONSEHEADER 

@ dragon的回答提到Access-Control-Allow-Headers,它只控制客户端向服务器发出请求时可以发送的标头。

这里有用的CORS教程:http://www.html5rocks.com/en/tutorials/cors/

答案 3 :(得分:0)

这是适合我的配置。我把它放在java Filter过滤方法中。有些标题需要仅使用预检请求(method =“OPTIONS”)发送,不需要每次都发送它们。

请注意,对于“授权”标题,还需要“Access-Control-Allow-Credentials”。

DATEDIFF(DAY, '2016-08-31', '1900-01-01')