CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。
CORS 请求默认不发送 Cookie 和 HTTP 认证信息。如果要把 Cookie 发到服务器,一方面要服务器同意,指定 Access-Control-Allow-Credentials
字段:
Access-Control-Allow-Credentials: true
相应的代码可以为:
res.header("Access-Control-Allow-Credentials", true)
另一方面,开发者必须在AJAX请求中打开 withCredentials
属性,否则,即使服务器同意发送Cookie,浏览器也不会发送。或者,服务器要求设置Cookie,浏览器也不会处理。JavaScript 的原生写法为:
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
如果利用 axios 类库的话可以按如下所示编写:
axios.defaults.withCredentials = true
需要注意的是,如果要发送Cookie,Access-Control-Allow-Origin就不能设为星号,必须指定明确的、与请求网页一致的域名。同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie,代码如下所示:
res.header("Access-Control-Allow-Origin", req.headers.origin);
网友评论