我正在尝试在使用Express.js Web框架的Node.js应用程序中支持CORS。我已经阅读了有关如何处理此问题的Google小组讨论,并阅读了一些有关CORS工作原理的文章。首先,我做到了(代码以CoffeeScript语法编写):
app.options "*", (req, res) ->
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
# try: 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Methods', 'GET, OPTIONS'
# try: 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
# ...
它似乎不起作用。看来我的浏览器(Chrome)没有发送初始的OPTIONS请求。当我刚刚更新资源块时,我需要向以下站点提交跨域GET请求:
app.get "/somethingelse", (req, res) ->
# ...
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
res.header 'Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
# ...
它可以工作(在Chrome中)。这也适用于Safari。
我读过...
在实现CORS的浏览器中,每个跨域的GET或POST请求之前都有一个OPTIONS请求,该请求检查GET或POST是否正常。
所以我的主要问题是,在我看来,这种情况怎么似乎没有发生?为什么没有调用我的app.options块?为什么需要在主app.get块中设置标题?
如果我是@OP,我会更改我的编程范例。
假设由于要向localhost或类似请求而使这些CORS被阻止。
最终,如果您要部署到像
Google Cloud Platform
orHeroku
或or这样的生产视蛋白,则无需担心诸如允许原产地之类的CORS或生产中的任何东西。因此,在测试服务器时,只需使用它即可,
postman
并且在部署服务器然后在客户端上工作之后,不会阻止CORS。