Access-Control-Allow-Origin需用于预检与实际请求吗?实际请求返回CORS头是否多余?
实际请求中返回CORS响应头的必要性分析
结论不是一概而论,得拆分每个头来看:
Access-Control-Allow-Origin:必须返回。当处理带凭证的跨域请求时,浏览器会严格校验实际响应的这个头是否与请求的Origin匹配,缺少的话前端会直接报错,无法获取响应内容。Access-Control-Allow-Methods:属于多余操作。这个头仅在OPTIONS预检请求中生效,用来告知浏览器允许的HTTP方法,实际请求阶段浏览器不会再检查该头,返回它不会引发问题,但完全没必要。Access-Control-Allow-Headers:属于多余操作。和上面的方法头同理,它只在预检请求中用来确认允许的自定义请求头,实际请求里返回没有任何作用。Access-Control-Allow-Credentials:必须返回。如果你的前端请求携带了凭证(比如Cookie、HTTP认证信息),浏览器会要求实际响应里这个头的值为true,否则会拦截响应,前端无法拿到数据。Vary: Origin:建议返回。这个头用于告知缓存服务器(如CDN、浏览器缓存),响应内容可能会随请求的Origin不同而变化,需要按Origin维度缓存。即便你的Allow-Origin是固定值,返回它也能避免缓存异常,不算多余。
总结:实际请求里保留Access-Control-Allow-Origin、Access-Control-Allow-Credentials、Vary: Origin即可,另外两个头可以移除,减少不必要的响应头体积。
内容的提问来源于stack exchange,提问作者William Entriken
相关产品推荐
相关产品推荐

