xhr.withCredentials与 CORS 什么关系

Posted nizuimeiabc1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xhr.withCredentials与 CORS 什么关系相关的知识,希望对你有一定的参考价值。

我们都知道,在发同域请求时,浏览器会将cookie自动加在request header中。但大家是否遇到过这样的场景:在发送跨域请求时,cookie并没有自动加在request header中。
造成这个问题的原因是:在CORS标准中做了规定,默认情况下,浏览器在发送跨域请求时,不能发送任何认证信息(credentials)如"cookies"和"HTTP authentication schemes"。除非xhr.withCredentials为true(xhr对象有一个属性叫withCredentials,默认值为false)。

所以根本原因是cookies也是一种认证信息,在跨域请求中,client端必须手动设置xhr.withCredentials=true,且server端也必须允许request能携带认证信息(即response header中包含
Access-Control-Allow-Credentials:true),这样浏览器才会自动将cookie加在request header中。

另外,要特别注意一点,一旦跨域request能够携带认证信息,server端一定不能将
Access-Control-Allow-Origin设置为*,而必须设置为请求页面的域名。

以上是关于xhr.withCredentials与 CORS 什么关系的主要内容,如果未能解决你的问题,请参考以下文章

CORS withCredentials - 支持有限?

Internet Explorer 10 忽略 XMLHttpRequest 'xhr.withCredentials = true'

xhr.withCredentials发送跨域请求凭证

ajax跨域请求无法携带cookie的问题

面试官问你:你知道跨域如何携带cookie

tineMCE 踩坑:images_upload_handler