jQuery跨域请求响应头
我正在用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
您需要在服务器响应Access-Control-Allow-Headers
添加另一个特定于CORS的标Access-Control-Allow-Headers
。 在这种情况下,
Access-Control-Allow-Headers: X-MYRESPONSEHEADER
参考: https : //developer.mozilla.org/en/http_access_control#Access-Control-Allow-Headers
如果您正在使用aws s3(我认为这适用于其他情况),问题可能是缺少CORS配置标记。 我遇到了类似的问题而失踪了。 这是我完成的配置:
http://localhost:3000 GET POST 3000 * *
AllowedHeader设置Access-Control-Request-Headers标头,ExposeHeader设置Access-Control-Expose-Headers标头,否则浏览器不允许javascript使用返回的标头。
要在服务器的响应中读取除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/
这是适合我的配置。 我把它放在java Filter过滤方法中。 有些标题需要仅使用预检请求(method =“OPTIONS”)发送,不需要每次都发送它们。
请注意,对于“授权”标题,还需要“Access-Control-Allow-Credentials”。
HttpServletResponse resp = (HttpServletResponse) res; resp.addHeader("Access-Control-Allow-Origin", "http://your_domain:your_port"); resp.addHeader("Access-Control-Allow-Credentials", "true"); if (((HttpServletRequest) req).getMethod().equals("OPTIONS")) { resp.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); resp.addHeader("Access-Control-Allow-Headers", "Authorization"); return; }
- 使用AngularJS的$ http POST请求将我的数据发布到服务器但失败并显示错误消息“Access-Control-Allow-Origin不允许”
- ajax成功后重新加载页面
- jQuery AJAX’multipart / form-data’不发送数据?
- 如何使用jQuery的ajax方法将json数组发布到PHP?
- 在laravel中创建文件夹
- AJAX:成功重定向然后修改新页面
- 普通Javascript等效于jQuery.param()
- 如果我想让我的网站跨平台兼容和屏幕阅读器兼容,我应该避免使用javascript,jquery,flash,ajax,silverlight吗?
- 从另一个localhost访问markLogic