为了账号安全,请及时绑定邮箱和手机立即绑定

如何允许CORS?

如何允许CORS?

如何允许CORS?我试图在我的Node.js应用程序中支持使用Express.js Web框架的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块中设置标题?
查看完整描述

4 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

要回答您的主要问题,如果POST或GET中包含任何非简单内容或标题,则CORS规范仅要求OPTIONS调用在POST或GET之前。

需要CORS pre-flight请求的内容类型(OPTIONS调用)是除以下内容之外的任何Content-Type :

  1. application/x-www-form-urlencoded

  2. multipart/form-data

  3. text/plain

除上述内容之外的任何其他内容类型都将触发飞行前请求。

至于标题,除以下内容之外的任何请求标题都会触发飞行前请求:

  1. Accept

  2. Accept-Language

  3. Content-Language

  4. Content-Type

  5. DPR

  6. Save-Data

  7. Viewport-Width

  8. Width

任何其他请求标头将触发飞行前请求。

因此,您可以添加自定义标头,例如:x-Trigger: CORS,这应该触发飞行前请求并点击OPTIONS块。

请参阅MDN Web API参考 - CORS预检请求


查看完整回答
反对 回复 2019-05-25
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

我发现最简单的方法是使用node.js包cors。最简单的用法是:

var cors = require('cors')var app = express()app.use(cors())

当然,有很多方法可以根据您的需要配置行为; 上面链接的页面显示了许多示例。


查看完整回答
反对 回复 2019-05-25
  • 4 回答
  • 0 关注
  • 1116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信