【发布时间】: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