【问题标题】:Node-Express-CORS issueNode-Express-CORS 问题
【发布时间】:2016-12-05 05:46:04
【问题描述】:

离子 2

我正在使用登录提供程序,但是当我将访问控制设置为

res.header('Access-Control-Allow-Origin', '*');

不工作

但是当我使用时它可以正常工作

res.header('Access-Control-Allow-Origin', 'http://localhost:8100');

它正在工作

但现在我想在手机设备上部署我的应用程序,我需要将其设置为通配符 res.header('Access-Control-Allow-Origin', '*');。因为我在手机上的应用程序不再在http://localhost:8100 上运行了

谁能帮我解决这个问题?

【问题讨论】:

标签: node.js express cors ionic2


【解决方案1】:

如果您要创建 preflighted request,则在 Access-Control-Allow-Origin 标头中禁止使用通配符。

您可以阅读Origin 请求标头以找出来源。然后,您可以根据允许的来源列表对其进行测试(您也可以假设任何来源都可以,但对于预检请求,完全公共访问很可能会带来安全风险)。最后你可以把它复制到Access-Control-Allow-Origin响应头中。

【讨论】:

    【解决方案2】:

    您的应用发出的 HTTP 请求是什么样的?

    在此 article 中查找“CORS 请求的类型”。

    如果您的 HTTP 请求是一个简单的请求,即

    • 方法是HEADGETPOST
    • 只有这些标题
      • Accept
      • Accept-Language
      • Content-Language
      • Last-Event-ID
      • Content-Typeapplication/x-www-url-encodedmultipart/form-datatext/plain

    如果您的 HTTP 请求很简单,则不需要预检。并且Access-Control-Allow-Origin* 被移动应用程序接受。

    否则,将发出预检请求(即OPTION 请求)并且* 中的Access-Control-Allow-Origin 将被忽略。它必须像http://localhost:8100一样完全指定。

    【讨论】:

    • 我发现了问题,因为我在请求中使用了withCredentials: true。它转向预检请求。所以我不能使用*。我想使用会话存储一些身份验证数据。如果我在设备上测试,它不会工作http://localhost:8100,我该如何解决这个问题?
    猜你喜欢
    • 2023-03-08
    • 2020-11-12
    • 2016-08-06
    • 2019-03-14
    • 1970-01-01
    • 2013-12-20
    • 2016-12-09
    • 2021-10-17
    • 2014-07-08
    相关资源
    最近更新 更多