【问题标题】:NetworkError while trying to POST a JSON payload to localhost via HTTP尝试通过 HTTP 将 JSON 有效负载发布到 localhost 时出现 NetworkError
【发布时间】:2020-08-13 17:05:03
【问题描述】:

以下情况: 我有一个带有一些简单的 python http (api) 服务器的多个 linux 系统。 在同一系统上,Firefox 浏览器通过从其他地方(本地网络网络服务器)打开的 ssl 运行 Web 应用程序。 Web 应用程序正在尝试与这个本地托管的 python api 服务器通信(仅在本地,在同一系统内)。 因此,该应用程序正在尝试通过 http 在 localhost / 127.0.0.1 / [::1] 上发送发布请求。 这是混合内容的情况,因为应用程序最初通过 SSL(托管在其他服务器上)运行。 Firefox 在使用 127.0.0.1 时允许这样做,要使用 localhost 我必须更改安全设置(我只是出于测试目的这样做)。 一切都失败并出现以下错误: 类型错误:尝试获取资源时出现网络错误 测试查询:

fetch ('http://127.0.0.1:8080', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(data)}).then(response => {console.log(response);});

axios 拦截到异常,但是返回的错误响应对象为空。 data 是一个非常基本的 3-field json 对象。

问题是,这些系统运行的是 Firefox 版本 57-60。 我可以在 Windows 10 上本地安装的 FF 60.2.2 上“成功”重现同样的问题,所以这似乎真的是 Firefox 问题。

最新的 Firefox 版本可以在不更改 JS 代码的情况下完美地进行通信(在 Windows 10 上)。 Python 服务器接受并支持 CORS。

我无法更新这些浏览器。

现在,我用 GET 查询做了一些测试。令人惊讶的是,它们确实有效! 喜欢:

fetch ('http://127.0.0.1:8080').then(response => {console.log(response);});

成功。 还有这个:

fetch ('http://127.0.0.1:8080', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(data)}).then(response => {console.log(response);});

失败:

TypeError: NetworkError when attempting to fetch resource.

我会怀疑 python 服务器,但它适用于 Windows 10 上的最新 FF 版本。此外,在 Firefox 开发人员工具中,我在网络中看不到任何 localhost POST 尝试,但我看到这些测试 GET 就像 if Firefox 甚至不会出于某种奇怪的原因尝试将 POST 发送到本地 http。所以也许我在某个地方犯了一个错误 - 为什么地狱 GET 工作和 POST 甚至没有发送这些旧 FF 版本?

任何提示都会很好。

【问题讨论】:

  • 只需几美分即可添加 - 同一系统上的 curl 也可以完美地发送 POST 查询。

标签: javascript python firefox axios fetch


【解决方案1】:

嗯,它必须是这个 python api 服务器和 CORS 支持(最终在新旧浏览器之间实现 CORS 兼容性)。 在我的 fetch 查询中添加一个选项“mode: 'no-cors'”解决了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多