节点中带有 chrome 50.0.2661.86 的 CORS
Posted
技术标签:
【中文标题】节点中带有 chrome 50.0.2661.86 的 CORS【英文标题】:CORS with chrome 50.0.2661.86 in node 【发布时间】:2016-08-18 16:18:11 【问题描述】:我认为,我在 Mac 中上次更新 chrome 时遇到了问题。在以前版本的 chrome 中它可以正常工作,实际上在 safari 和 firefox 上也可以正常工作...
我正在使用 CORS 开发一个 node.js 应用程序,我已经实现了这种方式:
app.use(function (req, res, next)
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET,POST,HEAD,OPTIONS,PUT,PATCH,DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Accept, Content-Type, Authorization');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
);
我正在使用 Ember,请求正在保存一个生成“正常”PATCH 请求的对象 :)
PATCH http://localhost:3000/challenges/id
但是,我想自从上次更新 chrome (50.0.2661.86) 以来,当我想做一个 PATCH 时,它会返回一个错误:
Access-Control-Allow-Methods 不允许方法 PATCH 预检响应
你知道这里有什么问题吗?
提前致谢
【问题讨论】:
【参考方案1】:您是如何提出请求的? PATCH
是全大写吗?它在 Firefox 中有效吗? (询问,因为看起来您的标头设置很好,尽管您可能也想检查一下以确定。)
【讨论】:
嗨,安妮,感谢您的回答。更新了问题。 我无法编辑之前的评论,但可以在 Safari 和 Firefox 中使用。 请注意ACA-Origin: *
和 ACA-Credentials: true
不能一起工作,但我认为如果它在 Firefox 和 Safari 中工作,这并不是真正的问题。可能只是一个 Chrome 错误。
也就是说,我假设您没有在请求中包含凭据。
是的,我包括凭据。但似乎该错误可能与...无关。【参考方案2】:
不确定它是否可以解决问题,但请尝试将next()
替换为:
if (req.method === 'OPTIONS')
res.status(200);
res.end();
else
next();
也许较新版本的 chrome 想让服务器手动处理预检响应。让我知道它的反应。
【讨论】:
非常奇怪的问题.. +1 这个问题,因为我也对解决方案感兴趣。 我无法使用 PUT 或 DELETE 进行测试,但使用 POST 和 GET 进行了测试,两者都可以。 好的。如果你用 PUT 和 DELETE 测试它,请告诉我。【参考方案3】:嗯,Chrome 会自动更新到新版本,并且没有再次发生。很奇怪的问题,我真的不知道这里发生了什么......
感谢所有回复:)
【讨论】:
以上是关于节点中带有 chrome 50.0.2661.86 的 CORS的主要内容,如果未能解决你的问题,请参考以下文章