美文网首页
Vue 项目中解决跨域无法获取 cookie 问题

Vue 项目中解决跨域无法获取 cookie 问题

作者: Oriharas | 来源:发表于2018-08-17 22:51 被阅读0次

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);

相关文章

网友评论

      本文标题:Vue 项目中解决跨域无法获取 cookie 问题

      本文链接:https://www.haomeiwen.com/subject/sihxiftx.html