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

  当我们在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"。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏只喝牛奶的杀手

前端优化

Pack Components into a Multipart Document

9120
来自专栏Java3y

Java精美思维导图

在学习的过程中画了几份脑图,都是我认认真真画的,现在放出来给大家参考一下。脑图很有利于我们整理知识点,一张图就可以把知识点全部概括了,有兴趣的同学也可以去画画。...

12330
来自专栏Web前端开发

深入理解iframe

iframe 用于在页面内显示页面,使用 <iframe> 会创建包含另外一个文档的内联框架(即行内框架)

22810
来自专栏追逐时光

.Net之使用Jquery Ajax通过FormData对象异步提交图片文件到服务端保存并返回保存的图片路径

  首先对于图片上传而言,在我们的项目开发中可以说出现的频率是相当的高的。这篇文章中,我将要描述的是在我们.Net中如何使用Jquery Ajax通过FormD...

13020
来自专栏自译文章/自学记录

参数传递方式小结

get传参数:/cart/add?sku_id=1&count=3 post传参数:['sku_id': 1, 'count': 3] url传参数:url...

13120
来自专栏Web前端开发

Ajax 的简介与使用

Ajax 的全称是 Asynchronous JavaScript and XML(即异步的 JavaScript 和 XML),是一种在无需重新加载整个网页的...

6810
来自专栏Java3y

AJAX常见面试题(修订版)

AJAX是“Asynchronous JavaScript and XML”的缩写。他是指一种创建交互式网页应用的网页开发技术。、

7010
来自专栏前端桃园

深入理解Node.js 进程与线程(8000长文彻底搞懂)

进程与 线程是一个程序员的必知概念,面试经常被问及,但是一些文章内容只是讲讲理论知识,可能一些小伙伴并没有真的理解,在实际开发中应用也比较少。本篇文章除了介绍概...

15230
来自专栏品茗IT

SpringBoot入门建站全系列(二十二)异步任务执行的几种方式

异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行。

13540
来自专栏luozhiyun的源码解析

10.源码分析---SOFARPC内置链路追踪SOFATRACER是怎么做的?

大家在看链路追踪之前可以先去看看官方的这篇文章SOFARPC 链路追踪剖析,有助于理解。

13330

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励