配置ngrok的CORS头

Dan*_* K. 16 ngrok

我正在运行一个本地网络服务器,它向ngrok服务器运行XHR请求,也从我的PC运行.

我到了XMLHttpRequest cannot load http://foo.ngrok.io/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

似乎ngrok FAQ提到了CORS标题,但仅与基本身份验证有关 - 它没有提到如何设置标题以便我可以在开发中测试我的应用程序.

如何更改ngrok的CORS选项以允许从localhost加载请求?

Qua*_* Le 10

对我来说,除了设置服务器之外,还需要在客户端发送的每个请求上添加标头
"ngrok-skip-browser-warning": true

  • 如果您的服务器的 CORS 设置正确,但仍然看到 CORS 错误,这可能是由于 ngrok 造成的。当我们第一次通过 ngrok 发送请求时,它将重定向到浏览器警告页面。因此,如果您关闭浏览器的 CORS,并打印 API 响应,您将看到警告页面的 HTML。CORS 来自此页面,而不是您的服务器。只需发送一个标题来跳过此页面,一切都会好起来的。 (3认同)

Sid*_*ria 6

首先,ngrok 只是一个隧道而不是服务器,因此在 ngrok 中配置 CORS 标头根本不可能。所以任何类型的 CORS 配置都需要在服务器级别完成。

例如,如果您使用的是 nginx 服务器,则需要在 nginx conf 文件中配置标头,例如:

location / {
    /*some default configuration here*/
    add_header 'Access-Control-Allow-Origin' '*';
}
Run Code Online (Sandbox Code Playgroud)

通过添加此标头,您表示允许从任何地址跨源访问您的地址,因为标头的值为“*”。您还可以通过替换值来指定允许访问您的地址的特定地址。

  • 根据我的经验,这似乎不正确。我在 Django 应用程序中启用了 CORS 标头,当我使用 CORS 测试器对其进行测试时,它通过了测试。但是,当我启动到我的计算机的 ngrok 隧道并通过它运行相同的 CORS 测试时,它失败了。 (4认同)

Dav*_*iss 6

我今天偶然发现了这个问题,并且能够通过启动ngrok并包含该-host-header标志来解决它。

ngrok http -host-header=rewrite 3000

从文档:

使用该-host-header开关重写传入的HTTP请求。

如果指定了重写,则主机头将被重写以匹配转发地址的主机名部分。

  • 对于最新的 ngrok,选项是 `--host-header=rewrite` (10认同)
  • 在这里注意到这一点是因为它给我带来了困难:_不_设置 `ngrok-skip-browser-warning` 可能会导致看起来像是 CORS 问题的问题,特别是在 GET 上(飞行前 OPTIONS 请求将成功,但 ngrok 返回浏览器警告页面)响应 GET,当然,这不是您想要的,并且不包含 `Access-Control-Allow-Origin` 标头 (4认同)