前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浏览器中跨域创建cookie的问题

浏览器中跨域创建cookie的问题

作者头像
程序员一一涤生
发布2019-09-10 18:59:25
9370
发布2019-09-10 18:59:25
举报

  当我们在www.a.com这个域下用ajax提交一个请求到www.b.com这个域的时候,默认情况下,浏览器是不允许的,因为违反了浏览器的同源策略。解决方案可以参考笔者的这篇博文:http://www.cnblogs.com/anai/p/4227157.html

  这里要讨论的是跨域中遇到的另一个问题,就是当提交一个请求到www.b.com这个域时,后台尝试在响应中绑定cookie信息,以告知浏览器去保存这个cookie,但是默认情况下,浏览器是不会去为你创建cookie的,具体现象就是你发现在响应中已经有set-cookie的响应头了并且有值,而且浏览器也会有信息显示已接收到cookie了,但是就是在cookie中找不到。没错,该现象就是因为你是跨域提交的创建cookie的请求。那么如果我们非要浏览器去创建这个cookie怎么办呢?这里就要使用到一个xmlHttpRequest对象的属性xhrFields,官方文档的解释如下:

A map of fieldName-fieldValue pairs to set on the native XHR object. For example, you can use it to setwithCredentials to true for cross-domain requests if needed.

  意思就是该属性是一个用来配置xhr对象的键值对,比如你可以在跨域请求有需要的时候设置withCredentials:true

  那么withCredentials:true是什么意思?

  该属性是告诉浏览器,1、允许创建来自不同域的cookie信息;2、每次的跨域请求都允许带上该cookie信息

  该配置项还需要后台的允许才有效,后台如果允许浏览器发送带凭据的请求,那么会在响应头中带上"Access-Control-ALLOW-Credentials",值为"true"。

  如果不加此响应头,浏览器将获取不到服务端的响应体。

  好了,到此我们已经知道怎么跨域创建cookies,并在每次的跨域请求中带上cookies了,简单的说就是前台要配置一个ajax参数:xhrFields:{withCredentials:true},有的资料上说还要设置crossDomain:true,但是笔者测试好像不需要;后台要在响应头中绑定"Access-Control-ALLOW-Credentials",值为"true"。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-01-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档