前言

随着工程的不断扩大,要部署很多不同的服务,这其中就避免不了Cookie的跨域问题,如何实现Cookie在不同域之前实现传输,本文将详细描述。


Cookie介绍

1、path
Cookie路径是由path设置,例如我们设置path为 / ,代表当前webapps下的所有工程均可访问此Cookie,若path为 /test ,代表 /test 下的请求才能访问此Cookie。
2、域
Cookie的域我们如果不设置的话,默认是当前工程,例如:http://www.test.com/index.html ,那么它的域为www.test.com,通过domain我们可以设置Cookie的域


解决顶级域名与二级域名之间的跨域问题

#通过设置domain
#顶级域名服务器与二级域名服务器之间哪个设置都能生效
#设置完毕后写回到客户端,用另一个服务器即可访问此Cookie
cookie.setDomain("test.com"); 

解决顶级域名于顶级域名之间的跨域问题

我们可以通过Nginx反向代理,将两个服务器域名统一到一个反向代理服务器。

    upstream www.test.com { server 127.0.0.1:8080 weight=1; server 127.0.0.1:8060 weight=1; }server {listen       80;server_name  www.test.com;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass   http://www.test.com;index  index.html index.htm;}}

使用Ajax方式实现跨域访问Cookie

$.ajax({type: 'GET',url: "http://www.cookie.test.com:8080/web2/ajaxServlet",data: {"username":"haha"},dataType: "json",//设置crossDomain与withCredentials的作用 : //允许携带cookie,不开启是不能带cookie到后台的,//同时后台也不能往前台写cookiecrossDomain: true,xhrFields: {withCredentials: true},success: function (data){console.info(data);}
});

最重要的是设置 withCredentials: true
参数 crossDomain: true 是指发送Ajax时,Request header 中会包含跨域的额外信息,但不会含cookie,建议设置此参数

因为跨域访问主要是由后端控制,服务器端也要设置两个重要参数
Access-Control-Allow-Origin : 控制允许携带Cookie访问的域
Access-Control-Allow-Credentials : 允许客户端携带证书式访问

#允许来自所有域的跨域请求访问
response.setHeader("Access-Control-Allow-Origin", "*");
#只接收来自http://www.test.com:8060的Cookie
response.setHeader("Access-Control-Allow-Origin","http://www.test.com:8060");

一般使用以下方式

if ( request.getHeader("Origin") != null ) {if(request.getHeader("Origin").contains("test.com")) {response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));}
}

同时还要设置另一个重要参数

//如果ajax里 withCredentials为true,就必须开启这个选项,
//允许携带证书式访问(允许操作cookie),默认是false
response.setHeader("Access-Control-Allow-Credentials", "true");

服务器端 Access-Control-Allow-Credentials = true时,参数Access-Control-Allow-Origin 的值不能为 *


引入跨域Filter

由于我们频繁设置 Access-Control-Allow-Origin 很不方便,我们可以引入Filter,它是在tomcat的lib包下的 catalina.jar 中。

<filter><filter-name>CorsFilter</filter-name><filter-class>org.apache.catalina.filters.CorsFilter</filter-class></filter><filter-mapping><filter-name>CorsFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

这样我们就可以省略以下代码了

if ( request.getHeader("Origin") != null ) {if(request.getHeader("Origin").contains("test.com")) {response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));}
}

参考文章:

跨域Ajax请求时是否带Cookie的设置

解决cookie跨域访问

[Cookie]解决Cookie跨域访问相关推荐

  1. [解决]WebLogic跨域访问安全问题

    [解决]WebLogic跨域访问安全问题 参考文章: (1)[解决]WebLogic跨域访问安全问题 (2)https://www.cnblogs.com/boazy/archive/2013/06/ ...

  2. jsonp跨域的缺点ajax缺点,浅析JSONP解决Ajax跨域访问问题的思路详解

    前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问 ...

  3. CP=CAO PSA OUR 用P3P header解决iframe跨域访问cookie

    短信模块以iframe方式嵌入系统,系统登录时,短信登录失败,这种情况只在win7下IE出现,win10未出现. 原因:IE禁止iframe跨域访问cookie 解决方案: 在短信登录时,进行如下设置 ...

  4. 普元EOS中, 子系统和portal不在同一个域中,使用jquery的jsonp来解决portal跨域访问

    转至元数据起始 [背景] 子系统和portal不在同一个域中且项目中要求不能使用nginx.apache等反向代理软件,故使用jsonp从代码角度解决ajax跨域问题 [实现思路] 通过jquery的 ...

  5. 解决Vue跨域访问后端API问题

    文章目录 前言 一.vue.config.js文件 二.配置代理参数 总结 前言 我们在写前后端分离的时候,请求后端接口是必要步骤,但是这个时候就有个问题,因为前端和后端是归属于不同端口,我们在直接访 ...

  6. ashx 跨域_使用ashx解决ajax跨域访问的问题

    由于跨域访问是被IE的安全访问拒绝掉的 需要使用web代理 新建一个proxy.ashx文件 在proxy.ashx里建一个webservice 代码如下: [WebService(Namespace ...

  7. ashx 跨域_使用ashx解决ajax跨域访问的问题 | 学步园

    由于跨域访问是被IE的安全访问拒绝掉的 需要使用web代理 新建一个proxy.ashx文件 在proxy.ashx里建一个webservice 代码如下: [WebService(Namespace ...

  8. 使用自开发的代理服务器解决 SAP UI5 FileUploader 上传文件时遇到的跨域访问错误试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今.Jerry 是 SAP 社区导师,S ...

  9. 如何解决谷歌浏览器解决跨域访问的问题

    如何解决谷歌浏览器跨域访问的问题 对于GitHub上面的开源项目,当我们通过git clone到本地进行运行时,会发现对于一些.html文件在自己的谷歌浏览器中打开后不显示任何内容.这是由于浏览器对于 ...

  10. AJAX跨域访问解决方案

    Case I. Web代理的方式 (on Server A) 即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果.此方案可以解决 ...

最新文章

  1. android京东加入购物车效果,京东360buy 手机项目的“加入购物车”动画效果研究...
  2. what should you do if you want to become an expert in one domain
  3. 【数据结构与算法】之容器盛最多水的算法实现
  4. oracle数据库的拼接字符串,Oracle数据库拼接字符串
  5. “金三银四”跳槽需谨慎!
  6. lc滤波电路电感电容值选择_模拟电路中,电感的这些知识点你都清楚吗?
  7. 通过配置IP SLA跟踪静态路由
  8. a deep leaning
  9. 如何用U盘安装Ubuntu操作系统
  10. NUKE 10 mac破解版影视特效制作软件,你也可以制作大片一样的影视效果!
  11. 测试硬件工程师常用英语单词
  12. 明光桥南 || 明光桥北
  13. C语言关键字浅析-enum
  14. Pytorch里addmm()和addmm_()的用法详解
  15. js 根据中文获取拼音首字母
  16. JavaEE——JUC
  17. 顺序表的基本操作——初始化表
  18. 用Xposed框架抓取微信朋友圈数据
  19. 类和对象总结及用法 计算点到点距离 线与线的关系 计算三角形平行四边形面积周长 判断形状
  20. 做好这三步,你的小程序离“爆款”就不远了

热门文章

  1. 通过seller_nick:店铺昵称或者是店铺主链接获取店铺所有商品接口,1688店铺所有商品接口接口获取方案
  2. 微机化远动系统与计算机网络,【浅析】智能电网调度自动化现状与发展
  3. 小狐狸横版游戏开发学习笔记(上)
  4. 计算机函数汇总,计算机二级EXCEL必考函数汇总
  5. 提升论文影响力的方法
  6. 我们为什么需要DTO(数据传输对象)
  7. 免费常用的快递物流查询api接口介绍
  8. 22 个出口节点对 Tor 网络发动中间人攻击
  9. 我的Java学习笔记(六)----IO流
  10. 目标检测从入门到精通—概述(一)