假的ajax OPTIONS请求与GET请求一起发出

时间:2017-11-11 15:41:47

标签: javascript node.js ajax

我正在使用下面的代码制作标准的ajax请求

let x = new XMLHttpRequest();
x.onload = function(event) { …};
x.open("GET", url, true);
x.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
x.send();

问题在于,由于某些原因我无法理解,会发出两个ajax请求。第一个是OPTIONS请求,第二个是我真正想要的GET请求。知道为什么吗?

我的服务器是一个nodejs应用程序,我开始使用nodemon,如果它感觉index.js已经改变,它将重新启动服务器(当你不想停止时,这有助于开发重启服务器)。通过此OPTIONS业务,nodemon认为我的index.js已更改并重新启动nodejs

此外,OPTIONS请求导致成功请求返回http 200.但是,首先没有任何内容返回到发起该ajax请求的网页(这可能是在OPTIONS请求之后立即执行的,{{1由nodejs重新启动。然后重复GET请求,也是200,网页得到结果

1 个答案:

答案 0 :(得分:1)

  

问题在于,由于某种原因,我无法理解,会发出两个ajax请求。第一个是OPTIONS请求,第二个是我真正想要的GET请求。知道为什么吗?

因为您正在进行跨域调用(例如,从http://localhosthttp://localhost:someport),这通常是Same Origin Policy禁止的。因此,浏览器发送“飞行前”OPTIONS请求,以查看服务器是否希望通过Cross-Origin Resource Sharing允许通话。