一、 单机模拟多域请求
- 配置本机host文件 C:\Windows\System32\drivers\etc\HOSTS 打开配置,最后处添加如下代码:
127.0.0.1 www.a.com (第一个域)
127.0.0.1 sub.a.com (第二个域)
127.0.0.1 www.b.com (第三个域)
二、利用JavaScript的Script标签来跨域写Cookie
① 跨域写Cookie
1.A域往B域写cookie
<script type="text/javascript" src="http://www.b.com:8082/set_cookie?cname=token&cval=test123"></script>
2.B域读A域写cookie
http://www.b.com:8082/cookie_reader.jsp
三、P3P协议
① 协议概述
P3P协议代表浏览器跨域的第三方安全的隐私策略。 所谓的P3P协议,是指P3P是万维网联盟(W3C)公布的一项隐私保护推荐标准。
② 协议规则(三方隐私策略)
例如: A域(支持) --》》 写Cookie --》》B域(不支持) 这样写Cookie操作,叫做“第三方cookie”。
如果A域支持,而B域不支持,这样就无法正确获取cookie。
③ 协议配置
response.addHeader("P3P", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");
注解:
由于浏览器各个版本不同,采用内核不同,配置支持第三方安全隐私策略不同。并不是配置P3P协议就一定支持,早期safari浏览器,是不允许设置P3P协议,设置也无效。
四、通过URL参数传递跨域写Cookie
① URL参数
http://www.a.com:8082/fg?from=http://www.b.com:8082/set_cookie
From参数指定A域往B域写cookie过程, set_cookie后台访问地址
② 读取cookie
http://www.b.com:8082/cookie_reader.jsp
五、跨域读Cookie
A域 --》》 写Cookie --》》B域
A域 --》》 读Cookie --》》B域
① 访问地址
http://www.a.com:8082/cross_cookie_reader.jsp
② 嵌入脚本
<script type="text/javascript" src="http://www.b.com:8082/read_cookies"></script>
③ 后台代码
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
// 获取所有cookie
Cookie[] cookies = request.getCookies();
// 字节组装
StringBuilder builder = new StringBuilder();
// 设置响应类型
response.setContentType("application/javascript");
// 循环读取
if (cookies != null) {
PrintWriter writer = response.getWriter();
for (Cookie cookie : cookies) {
builder.setLength(0);
// 组装,结果类似于var token='test123';
builder.append("var ")
.append(cookie.getName())
.append("=")
.append("'")
.append(cookie.getValue())
.append("'")
.append(";");
}
// 浏览器输出
writer.write(builder.toString());
}
④ 读取cookie
<script type="text/javascript">
alert(token);
</script>