1、同源策略
同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性。这个策略可以追溯到 Netscape Navigator 2.0。
Mozilla 认为两个页面拥有相同的源,如果它们的协议、端口(如果指明了的话)和主机名都相同。下表给出了相对http://store.company.com/dir/page.html同源检测的结果:
URL 结果 原因 http://store.company.com/dir2/other.html |
成功 | ||
http://store.company.com/dir/inner/another.html | https://store.company.com/secure.html | 失败 | 协议不同 |
http://store.company.com:81/dir/etc.html | 端口不同 | ||
http://news.company.com/dir/other.html | 主机名不同 |
同源策略,简单地说就是要求动态内容(例如,JavaScript或者VBScript)只能阅读与之同源的那些HTTP应答和cookies,而不能阅读来自不同源的内容。更为有趣的是,同源策略对写操作没有任何限制。
2、JSONP
以上同源策略是基于安全考虑的,当前域不能访问其他域的东西。但这也带来一个问题,不同域之间如何协助。
先看一个简单的不同源请求的例子。准备2段代码,用来模拟2个不同源的服务器,分别部署在2个不同的web容器上。为了方便,我们直接使用jquery进行异步请求,不使用原生的XMLHttpRequest.
localfile.html
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlheadtitle></scriptsrc="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"scriptbodyscripttype="text/javascript" $(document).ready(function(){
- $.get('./sayhello.js',function(result){});
- $.get('http://freeyun.duapp.com/jsonp/sayhello.js',250)"> });
- >
sayhello.js
- alert("hellojsonp");