CORS错误标头允许来源* http与https

时间:2018-07-29 00:54:10

标签: javascript ajax servlets cors xmlhttprequest

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

如果从http://提供服务,则Safari&Edge会导致CORS错误,但如果是https://,则不会导致CORS错误。无论如何,Chrome&FF都可以正常运行。

我有一个用于上传的第二个POST,它成功运行,因为它包含以下方法:

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

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

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

1 个答案:

答案 0 :(得分: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");

希望它会有所帮助:)