【问题标题】:CORS error Header Allow-Origin * http vs httpsCORS 错误标头 Allow-Origin * http vs https
【发布时间】:2019-01-05 15:59:26
【问题描述】:

我正在使用 XMLHttpRequest(),发送 POST。 在我们的 servlet 中,我们默认为 req.setHeader("Access-Control-Allow-Origin", "*");

如果从 http:// 提供,Safari 和 Edge 会导致 CORS 错误,但如果是 https://,则不会。 Chrome 和 FF 表现正常。

我有一个成功运行的第二次上传 POST,因为它包含此方法:

setSecureConnection: function() {
  baseURL = baseURL.replace(/http\:/, 'https:');
}

在失败的servlet上,我也试过req.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));,但没有成功。

那么为什么浏览器不接受通配符呢?

【问题讨论】:

    标签: javascript ajax servlets cors xmlhttprequest


    【解决方案1】:

    我通常通过将https://cors-anywhere.herokuapp.com/ 附加到 URL(例如:https://cors-anywhere.herokuapp.com/http://URL2POST.COM/)来使用 CORSA API(省去了处理标头的麻烦);只是一个有用的提示。

    至于您的标头,对于 Edge 和 Safari,假设您的请求正在传递来源并且一切正常,您可能需要尝试以下操作:

    req.setHeader("Access-Control-Allow-Origin", "*");
    req.setHeader("Access-Control-Allow-Credentials", "true");
    req.setHeader("Access-Control-Allow-Methods", "ACL, CANCELUPLOAD, CHECKIN, CHECKOUT, COPY, DELETE, GET, HEAD, LOCK, MKCALENDAR, MKCOL, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, SEARCH, UNCHECKOUT, UNLOCK, UPDATE, VERSION-CONTROL");
    req.setHeader("Access-Control-Allow-Headers", "Overwrite, Destination, Content-Type, Depth, User-Agent, Translate, Range, Content-Range, Timeout, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control, Location, Lock-Token, If");
    req.setHeader("Access-Control-Expose-Headers", "DAV, content-length, Allow");
    

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 2016-11-06
      • 1970-01-01
      • 2018-09-19
      • 2019-06-19
      • 2021-02-20
      • 2021-08-12
      • 2018-03-28
      • 1970-01-01
      相关资源
      最近更新 更多