pan*_*h13 7 javascript ajax jquery cors
使用JQuery 1.8.2
我正在从一个AppServer(Front)到另一个AppServer(Back)服务器向一个应用程序发出CORS请求.当我从Front进行以下Ajax调用时,来自Back的302响应(安全检查)得到尊重,但我的JSESSIONID cookie未被存储:
$.ajax({
url : url,
dataType : 'html',
success : function(data, status, xhr) {
$(dataContainer).append(data);
},
complete: function(xhr, status, error) {
if (xhr.status != 200) {
$.logger(xhr.getResponseHeader('Location'));
}
}
});
Run Code Online (Sandbox Code Playgroud)
现在,如果我进行相同的调用,但添加了withCredentials,我的JSESSIONID正在被正确存储,但302重定向正在被删除.Chrome和Firefox(两者的最新版本)都停止处理请求.
$.ajax({
xhrFields: { withCredentials: true },
url : url,
dataType : 'html',
success : function(data, status, xhr) {
$(dataContainer).append(data);
},
complete: function(xhr, status, error) {
if (xhr.status != 200) {
$.logger(xhr.getResponseHeader('Location'));
}
}
});
Run Code Online (Sandbox Code Playgroud)
我试图从xhr对象获取重定向位置标题,但它是空的.
我在Back的所有回复中设置以下内容:
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS");
response.setHeader("Access-Control-Max-Age", "1728000");
response.setHeader("Access-Control-Allow-Headers", "Cookie,X-Requested-With");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Expose-Headers", "Location");
Run Code Online (Sandbox Code Playgroud)
显然,如果我可以让它工作,我会限制Origin.
有谁知道使用JQuery需要什么?它是一个JQuery问题,还是一个经历过所有Ajax + CORS请求的问题?
您不能Access-Control-Allow-Origin: *与 一起使用Access-Control-Allow-Credentials: true。当 Access-Control-Allow-Credentials 设置为 true 时,Access-Control-Allow-Origin 的值必须是 Origin 标头的值:
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
Run Code Online (Sandbox Code Playgroud)
或者,您可以删除Access-Control-Allow-Credentials: true标头(以及withCredentials = trueJS 代码)。
| 归档时间: |
|
| 查看次数: |
8575 次 |
| 最近记录: |