我正在使用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"));
,但没有成功。
那为什么浏览器不接受通配符?
答案 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");
希望它会有所帮助:)