以前写过一个相关的跨域的例子,是借助第三个无关的页面(使用了iframe)
最近又遇到了几种跨域的解决方案:
1、
asp.net设置p3p的方法:
HttpContext.Current.Response.AddHeader("p3p", "CP=\""IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""")
PHP设置p3p的方法:
header(‘P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"‘);
JSP设置p3p的方法:
response.setHeader("P3P","CP=‘IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT‘")
做一个例子:
在www.a.com 中有两个页面:index.jsp(普通的一个页面) setCookie.jsp(设置本地cookie)
在www.b.com中有一个页面:index.jsp,此页面中有一个frame,frame的src=www.a.com/setcookie.jsp
正常访问 www.b.com ,然后看看(www.a.com/index.jsp下)是否有cookie信息,答案是否定的 www.a.com 域名下是不存在cookie
要想在www.a.com下生成想要的cookie就可以使用上面的方法:response.setHeader("P3P","CP=‘IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT‘")
再次尝试访问,就会发现www.a.com/index.jsp 下有了想要生成的Cookie.
第二种方式呢:JSONP的使用
首先了解一下<script>的src的属性,不一定指向的是js文件,例如可以指向一个servlet、jsp等等
首先在www.b.com 下有一个页面index.jsp ,index.jsp中有一个<script>window.onload=function1();</script>
在www.a.com 下有个页面里面定义了一个function1的js方法,正常的情况下我们在www.b.com中是访问不到www.a.com 下的function1,这就是所谓的跨域
接下来的方法就可以实现在在www.b.com 中调用www.a.com 中的function1,在www.a.com/index.jsp中引入<script src=http://www.b.com/index.jsp></script>
(function1要放在这句话的前面吧),这就是所谓牛X的JSONP
(由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。)