我处于以下情况。我想在快递(node.js)上应用跨源资源共享,因此我正在使用cors。我有表格的声明
app.use(cors());
在声明之前
app.use(app.router);
在应用程序.js文件上(当然,我在文件的顶部加载cors)。对于服务器生成的响应,我使用以下对象:
var options = {
"ETag" : "",
"Access-Control-Allow-Origin" : "*",
"Access-Control-Allow-Methods" : "HEAD,GET,PUT,POST,DELETE,OPTIONS",
"Content-Type" : "application/json; charset=utf-8",
"Transfer-Encoding" : "chunked"
};
然后通过遍历此对象的键,我设置了每个响应的标头。
我相信到目前为止一切顺利。现在,在客户端,我正在使用ajax来发布这样的请求:
$.ajax({
type: "POST",
accepts: "application/json",
url: urlForPOST,
data: JSON.stringify(theData),
async: true,
contentType: "application/json; charset=UTF-8",
dataType: "json",
success: function(data, textStatus, jqXHR) {
alert("Received success: '" + JSON.stringify(data) + "' with ETag '" + jqXHR.getResponseHeader('ETag') + "'");
},
error: function (data, textStatus, errorThrown) {
alert("Received error: '" + JSON.stringify(data) + "'n Status: '" + textStatus + "'n error thrown = '" + errorThrown + "'");
},
crossDomain: true,
username: myData.username,
password: myData.password
}).done(function() {
alert( "second success" );
}).fail(function() {
alert( "error while posting" );
}).always(function() {
alert( "finished" );
});
现在,我最终陷入了以下奇怪的情况。当客户端和服务器在同一台机器上运行并且我在 url 中写下"localhost"时,我就可以发布来自客户端(同一台机器)的请求。当我将地址的"localhost"部分替换为服务器在 LAN 上的实际 IP 时,我可以发布来自其他机器(以及其他 IP)中的客户端的请求,但不能发布来自服务器实际运行的同一台机器上的客户端的请求。实际上,在这种情况下,当我在同一台计算机上使用客户端时,我在服务器日志中看到以下内容:
OPTIONS /aRoute 204 1ms
POST /aRoute 401 2ms
客户通知我这是未经授权的交易。好吧,首先,我发送的用户名和密码肯定是正确的;所以事实并非如此。
此外,在这种情况下,为什么此选项出现在日志中?当我从在其他机器上运行的客户端发布时,服务器日志中没有这样的事情。此外,这不是我所期望的。
最后,有人可以解释为什么在这种情况下,此选项会出现在服务器日志上吗?此外,有没有一种方法可以写下跨源 ajax 请求,当我在服务器运行的同一台机器上使用客户端时(显然是为了调试目的),以及当我发布来自不同机器的请求时?这里至少有一个细节是我错过的。
提前感谢您的时间和帮助。
我正在编辑原始帖子以提及此事:当我删除对"cors"模块和相关"app.use(cors());"语句的要求时,我可以使用"app.options(...);"拦截地址上的传入请求并打印控制台.log语句。特别是我正在使用以下语句:
app.options(aRoute, function (request, response, next) {
console.log("FOLLOWING ROUTE THROUGH OPTIONS");
defs.SET_DEFAULT_JSON_HEADER(response);
next();
});
其中SET_DEFAULT_JSON_HEADER根据我上面列出的选项设置标题。
chrome使用ajax调用跨源资源时遇到了问题。
我已经使用节点js和本地http服务器来部署我的节点js应用程序。
当我访问跨源资源时,我收到错误响应
我找到了一个解决方案,
1) I have added below code to my app.js file
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
2) In my html page called cross origin resource using $.getJSON();
$.getJSON("http://localhost:3000/users", function (data) {
alert("*******Success*********");
var response=JSON.stringify(data);
alert("success="+response);
document.getElementById("employeeDetails").value=response;
});