【问题标题】: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 却有。

更新:更正了错误消息中的小错误

【问题讨论】:

    标签: spring http https cors


    【解决方案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) 的条件,并且在所有浏览器中都以类似的方式处理,最重要的是,它的工作方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2021-09-07
      • 1970-01-01
      相关资源
      最近更新 更多