【发布时间】:2015-02-16 18:05:55
【问题描述】:
编辑 它是发送请求的标准 Firefox 开发者工具。但是响应是空的,不是状态代码。在 Chrome 中我也得到 net::ERR_EMPTY_RESPONSE
我正在尝试使用 Javascript 发送跨域 AJAX 请求。在发送我的 JQuery 请求之前,我已经启用了这样的 CORS:
$.ajaxSetup({
crossDomain:true,
});
我尝试使用 Fiddler 发送测试请求,并且在我拥有的响应标头中:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
但是我仍然无法在 Firefox 和 Chrome 中获得以下请求
var data = {
uid: uid,
pwd: password,
deviceid: deviceid,
push: push
};
var settings = {
type:"POST",
data: data,
success: onLoginSuccess,
error: onLoginFailed
};
$.ajax(globals.getServiceURL() + "/login", settings);
在 Firebug 控制台中我得到:
Cross-Origin Request Blocked: The Same Origin Policy disallows
reading the remote resource at (request URL goes here).
This can be fixed by moving the resource to the same domain or enabling CORS.
如何正确启用 CORS?
【问题讨论】:
-
还有什么其他响应
Access-Control-*响应头 -
也尝试返回标头
Access-Control-Allow-Methods: POST, GET, OPTIONS -
crossDomain:true不启用 CORS。它告诉 jQuery 不要添加它将为本地 Ajax 请求添加的额外标头,因为预计本地请求将被重定向(使用 HTTP Location 标头)到不同的来源)。这可以防止原本是简单请求的请求变成需要预检 OPTIONS 请求的复杂请求。浏览器要么支持 CORS,要么不支持。如今,“不”的情况几乎不再适用。 -
Access-Control-Allow-Headers: origin,accept,content-type,content-length,uid,pwd,deviceid,devicetype,push,token,hash,id
-
查看浏览器的开发者工具。查看“网络”选项卡。是否正在提出请求?它得到回应了吗?它们是否包含您期望的数据?特别注意请求类型(实际上是 POST 吗?)。
标签: javascript jquery ajax cors