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