【问题标题】:Hapi - enabling CORSHapi - 启用 CORS
【发布时间】:2018-12-09 09:58:15
【问题描述】:

我正在使用 Node JS 和 Hapi (v17) 编写 BE 应用程序。在服务器运行时,我尝试使用 POST 方法调用端点,但我不断收到错误消息:

Failed to load http://localhost:8001/login: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

我想在服务器站点上启用CORS,但对我没有任何帮助。

这是我在服务器站点上启用 CORS 的方法:

const hapi = require('hapi')

const server = hapi.server({
    port: 8001,
    host: 'localhost',
    routes: { 
        cors: true
    } 
})

我也尝试为特定路线启用 cors,但这也没有效果:

server.route({
        method: 'POST',
        path: '/login',
        config: {
            cors: {
                origin: ['*'],
                additionalHeaders: ['cache-control', 'x-requested-with']
            }
        },
        handler: async (request, reply) => {
            return User.login(request, reply)
        }
    })

有谁知道我应该怎么做才能启用 CORS 并解决问题?

另外,还有一张来自浏览器网络标签的截图:

编辑:

我添加了处理OPTIONS 方法的路由,现在我遇到了另一个问题。

Failed to load http://localhost:8001/login: Request header field access-control-allow-credentials is not allowed by Access-Control-Allow-Headers in preflight response.

下面是网络标签中的样子:

【问题讨论】:

  • “预检请求” 表示一个 OPTIONS 请求(如您的请求屏幕截图所示)。所以你需要为这种类型的请求设置一个路由配置。
  • 好的,我可以定义一个新的路由来处理OPTIONS 方法,但是这样的路由的响应应该是什么?
  • 没什么,内容无关紧要,浏览器只看标题就知道是否允许进行实际请求
  • Access-Control-Allow-Credentials 是一个 response 标头 - 那么为什么它在您的 Access-Control-Request-Headers 请求标头中 - 请显示发出请求的客户端代码 - 显然是你在请求中重新放入响应头
  • @JaromandaX 好点。从请求中删除此标头后,一切正常。谢谢,伙计们。

标签: javascript node.js web-services cors hapijs


【解决方案1】:
cors: {
            origin: [
                '*'
            ],
            headers: ["Access-Control-Allow-Headers", "Access-Control-Allow-Origin","Accept", "Authorization", "Content-Type", "If-None-Match", "Accept-language"],
            additionalHeaders: ["Access-Control-Allow-Headers: Origin, Content-Type, x-ms-request-id , Authorization"],
            credentials: true
        }

您还应该定义一个合格的域,而不仅仅是 * 通配符

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 2022-05-31
    • 2017-05-23
    • 2023-03-04
    • 2019-05-09
    • 2018-05-10
    • 2019-01-14
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多