Chrome 跨域请求 withCredentials 为 True 时,为什么服务器返回 Allow-Origin '*' 会报错?
当请求的 withCredentials 为 True 时,表示请求需要发送凭证(如 Cookie、HTTP 认证等)。如果服务器返回的 Access-Control-Allow-Origin 的值为 '*',意味着服务器允许所有的来源进行跨域请求,但不允许发送凭证。
根据 CORS(跨域资源共享)规范,当请求需要发送凭证时,服务器的响应头中必须包含 Access-Control-Allow-Origin,并且其值不能为 '*',而是必须是请求的 Origin 的具体值,以确保只有特定的来源可以访问资源。
因此,当 Chrome 浏览器发现请求需要发送凭证,但服务器返回的 Access-Control-Allow-Origin 值为 '*' 时,即使其他的 CORS 规则都符合,Chrome 也会报错,提示 CORS 请求被阻止,因为这违反了浏览器的安全策略,防止凭证被发送到不受信任的来源。
为了解决这个问题,服务器应该根据请求的 Origin 值动态设置 Access-Control-Allow-Origin 的值,以确保只有特定来源可以访问资源,并且允许发送凭证。例如,可以使用服务器端的代码来动态设置响应头:
response.headers['Access-Control-Allow-Origin'] = request.headers.get('Origin')
这样做可以确保浏览器在请求需要发送凭证时不会报错,并且只有特定来源可以访问资源。
原文地址: https://www.cveoy.top/t/topic/pmr7 著作权归作者所有。请勿转载和采集!