Chrome 允许 ajax 访问 http 外部来源,而 firefox 不允许 - 为啥?
Posted
技术标签:
【中文标题】Chrome 允许 ajax 访问 http 外部来源,而 firefox 不允许 - 为啥?【英文标题】:Chrome allows ajax going to http foreign origin where firefox does not - why?Chrome 允许 ajax 访问 http 外部来源,而 firefox 不允许 - 为什么? 【发布时间】:2020-06-02 20:05:27 【问题描述】:我有一个带有 javascript 代码的 JSP,在带有 HTTPS 的服务器上运行。在这个 JavaScript 中,我触发了对 另一个(本地)网络服务器的请求,如下所示:
let url = 'http:/localhost:3111/doSomePost';
$.ajax(
type: 'POST',
url: url,
contentType: 'application/octet-stream',
processData: false,
data: uint8array
)
这需要在本地网络服务器上启用 CrossOrigin 才能工作 - 我配置了该部分并且它可以工作。
但它只适用于 Chrome。不在 Firefox 中。
Firefox 会给我这个错误:
跨域请求被阻止:同源策略不允许读取 远程资源在 http://localhost:3111/doSomePost。 (原因:CORS 请求未成功)。
我可以在 firefox devtools 的网络选项卡中看到,firefox 甚至不费心发送预检请求(OPTIONS 请求)。所以 Firefox 只是决定它不会发送该请求(我怀疑这是因为本地网络服务器协议是 HTTP)。
我现在已将本地网络服务器更改为使用自签名证书的 HTTPS,如下所述:https://www.baeldung.com/spring-boot-https-self-signed-certificate
现在,它可以在 Firefox 和 Chrome 中使用(在我手动添加无效的证书之后)。
我只是想知道为什么 chrome 没有问题,而 firefox 却有。
更新:更正了错误消息中的小错误
【问题讨论】:
【参考方案1】:我设法找到了更好的解决方案。我没有将本地网络服务器切换到 HTTPS 以使 firefox 正常工作,而是将上述请求更改为:
let url = 'http:/localhost:3111/doSomePost';
$.ajax(
type: 'POST',
url: url,
data: jsonWithBase64encodedData
)
这现在再次符合所谓的“简单请求”(https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) 的条件,并且在所有浏览器中都以类似的方式处理,最重要的是,它的工作方式。
【讨论】:
以上是关于Chrome 允许 ajax 访问 http 外部来源,而 firefox 不允许 - 为啥?的主要内容,如果未能解决你的问题,请参考以下文章