节点中带有 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的主要内容,如果未能解决你的问题,请参考以下文章

将插入符号位置设置为零在 chrome 中的 contenteditable 元素的节点内

节点 - 浏览器关闭时推送通知

用于刷新页面的 Chrome 扩展

为啥不能再在 Chrome 中移动 DOM 节点?

带有 dom 文档的 xpath

为啥标题在带有 chrome 的 android 上的地理定位中保持“空”