由于工作需要,花费了较多的时间处理跨域的问题,未避免遗忘,特此记录。
1.跨域的场景:
第一种:协议不同;
第二种: 域名不同;
第三种:端口不同;
2.跨域的关键点:
浏览器和服务器同时支持;
浏览器全权负责;
需要带Cookie,需要双方都同意;
3.后台跨域的处理:
基于springmvc的后台,在webMvcHandlerAdapter设置Cors放行; 实现方式可以用注解对单个请求处理,或者全局配置的方式;
其它服务器容器,在返回头中设置 Access-Control-Allow-Origin: * ;
本质也就是在响应头里面设置 Access-Control-Allow-Origin: * 字段;
4.前台跨域处理(Cookie共享):
当前域 或者 当前域的父级写入Cookie(同级与子级都不行);
写入
读取
因此,第一种共享方案: 通过代理,将不同的关联系统 设置成 父子域;(不适用于动态接入系统,以及 系统太多的情况,且耦合度很高); (即,通过后台登陆其它系统的方式,进行浏览器共享;)
第二种共享方案: 通过浏览器+服务器的方式,由于天生符合CORS协议的要求,所以可以实现 类似于Cookie共享(即需要将cookie存储在不同的域下)的功能;
此外,同名的Cookie不一定相互排斥,即某一个请求可能包括多个JSESSIONID;Cooke的唯一性还需要由 Domain,Path共同确定;
参考:
总结一下跨域的几种情况
跨域资源共享 CORS 详解 -------->跨域必看文章