2来自Google Chrome的请求而不是1

时间:2018-02-27 16:11:02

标签: node.js rest google-chrome express cors

我们正在使用 vue.js Node.js Express )构建SPA。 SPA从1个域下载,REST api在另一个域中。

问题在于我注意到,当对另一个域(不同于下载网页的域)进行ajax调用时,Chrome会执行2个请求而不是1个请求(CORS请求)。

经过一些研究后,我得出的结论是功能,而不是错误。

那么,应该以优雅的方式解决这个问题的最佳方法是什么?

我目前放弃了第一个200状态响应的请求,但我认为这不是最好的方法。

1 个答案:

答案 0 :(得分:3)

如果发送的第一个请求是OPTIONS请求,则最有可能是CORS pre-flight。浏览器使用此方法询问服务器是否允许提交实际请求。

如果您的服务器正在运行业务逻辑以响应飞行前,您还没有正确实施CORS - HTML5Rocks提供了这个实际工作方式的方便流程图:

CORS flowchart

这可能看起来有点压倒性 - 谢天谢地,你不必担心,因为已经提供此功能的official CORS middleware for Express等等。如果您将其插入,则应该能够从应用程序中删除所有明确的res.header("Access-Control-Allow-Origin", "*")内容。