我们正在使用 vue.js 和 Node.js ( Express )构建SPA。 SPA从1个域下载,REST api在另一个域中。
问题在于我注意到,当对另一个域(不同于下载网页的域)进行ajax调用时,Chrome会执行2个请求而不是1个请求(CORS请求)。
经过一些研究后,我得出的结论是功能,而不是错误。
那么,应该以优雅的方式解决这个问题的最佳方法是什么?
我目前放弃了第一个200状态响应的请求,但我认为这不是最好的方法。
答案 0 :(得分:3)
如果发送的第一个请求是OPTIONS
请求,则最有可能是CORS pre-flight。浏览器使用此方法询问服务器是否允许提交实际请求。
如果您的服务器正在运行业务逻辑以响应飞行前,您还没有正确实施CORS - HTML5Rocks提供了这个实际工作方式的方便流程图:
这可能看起来有点压倒性 - 谢天谢地,你不必担心,因为已经提供此功能的official CORS middleware for Express等等。如果您将其插入,则应该能够从应用程序中删除所有明确的res.header("Access-Control-Allow-Origin", "*")
内容。