如果CORS标头“ Access-Control-Allow-Origin”为“ *”,则不支持凭据

时间:2018-11-22 08:58:43

标签: angular google-chrome spring-boot firefox xmlhttprequest

我的应用程序在Java Web应用程序中执行一些REST请求。这些请求是CORS请求,因此浏览器每次在真正的OPTION预检之前执行一次。 每个请求都类似于

  

主机:localhost:8080用户代理:Mozilla / 5.0(Windows NT 6.1; Win64;   x64; rv:63.0)Gecko / 20100101 Firefox / 63.0接受:   text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8   接受语言:it-IT,它; q = 0.8,en-US; q = 0.5,en; q = 0.3接受编码:   gzip,缩小访问控制请求方法:GET   访问控制请求标头:iv组,iv用户,x-xsrf令牌来源:   http://localhost:4200连接:保持活动状态高速缓存控制:max-age = 0

java应用程序响应为:

  

HTTP / 1.1 200 Set-Cookie:JSESSIONID = 70A5ED7E8D32DCEE55991D3945994AB0;   路径= / lablablab; HttpOnly Set-Cookie:   XSRF-TOKEN = 35ad4230-b664-400c-84c0-7d06877bf05d;路径= /变化:原点   变化:访问控制请求方法变化:   访问控制请求标头访问控制允许源:   http://localhost:4200访问控制允许方法:   GET,POST,PUT,DELETE,HEAD,OPTIONS访问控制允许头:   iv组,iv用户,x-xsrf令牌访问控制权限凭证:   true Access-Control-Max-Age:1800允许:GET,HEAD,POST,PUT,DELETE,   跟踪,选项,补丁X内容类型选项:nosniff   X-XSS-Protection:1; mode = block缓存控制:无缓存,无存储,   max-age = 0,必须重新验证语法:no-cache过期:0   X帧选项:拒绝内容长度:0日期:2018年11月22日,星期四   格林尼治标准时间08:31:18

对于firefox,如果CORS标头Access-Control-Allow-Origin*,则此响应在控制台上违反了CORS,它不写入凭据。

对于谷歌浏览器,请求正常,并且显示内容。

3 个答案:

答案 0 :(得分:1)

如果您在客户端请求中使用 withCredentials ,则会发生这种情况。在这种情况下,您可以修改服务器端以检查允许的引用,并在Access-Control-Allow-Origin标头中发送正确的url。如果您不使用凭据,*将被接受。

可以在此处找到更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials

答案 1 :(得分:0)

对于所有来这里搜索此问题的人:

我安装了扩展名(CORS Unblock),该扩展名已覆盖标题。关闭或卸载它可以解决问题。

答案 2 :(得分:-1)

此配置对我有用。请注意客户端withCredentials: true

客户端配置:

config = {
    url:'http://somedomain',
    method:'post',
    withCredentials: true,
    data:{myfield:"myvalue"}
};

axios.request(config);

服务器端配置:

Access-Control-Allow-Credentials   true
Access-Control-Allow-Headers  X-PINGOTHER, Content-Type
Access-Control-Allow-Methods GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS
Access-Control-Allow-Origin: http://localhost:4200 // WILD CARD WILL NOT WORK WHEN POSTING