我正在使用 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"));
也没有成功。
那么为什么浏览器不接受通配符呢?
最佳答案
我通常通过附加 https://cors-anywhere.herokuapp.com/ 来使用 CORSA API(省去了处理 header 的麻烦)到 URL(例如: https://cors-anywhere.herokuapp.com/http://URL2POST.COM/ );只是一个有用的提示。
对于您的 header ,对于 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");
希望有帮助:)
关于javascript - CORS 错误 header 允许来源 * http 与 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51576384/