标签:xmlhttp ie10 绝对路径 映射 获取 格式 默认 标签 域名
js跨域
是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。
由于浏览器的同源策略
浏览器的同源策略会导致跨域,这里同源策略又分为以下两种
了解完跨域之后,想必大家都会有这么一个思考,为什么要有跨域的限制,浏览器这么做是出于何种原因呢。其实仔细想一想就会明白,跨域限制主要是为了安全考虑。
AJAX同源策略主要用来防止CSRF攻击。如果没有AJAX同源策略,相当危险,我们发起的每一次HTTP请求都会带上请求地址对应的cookie,那么可以做如下攻击:
http://mybank.com
,http://mybank.com
向用户的cookie中添加用户标识。http://evil.com
。执行了页面中的恶意AJAX请求代码。http://evil.com
向http://mybank.com
发起AJAX HTTP请求,请求会默认把http://mybank.com
对应cookie也同时发送过去。DOM同源策略也一样,如果iframe之间可以跨域访问,可以这样攻击:
http://mybank.com
。http://mybank.com
的dom节点,就可以拿到用户的输入了,那么就完成了一次攻击。所以说有了跨域跨域限制之后,我们才能更安全的上网了。
原理 :
? 我们知道,在页面上有三种资源是可以与页面本身不同源的。它们是:js脚本,css样式文件,图片,像淘宝等大型网站,肯定会将这些静态资源放入cdn中,然后在页面上连
接,如下所示,所以它们是可以链接访问到不同源的资源的。
1)<script type="text/javascript" src="某某cdn地址" ></script>
2)<link type="text/css" rel="stylesheet" href="某个cdn地址" />
3)<img src="某个cdn地址" alt=""/>
而jsonp就是利用了script标签的src属性是没有跨域的限制的,从而达到跨域访问的目的。因此它的最基本原理就是:动态添加一个<script>
标签来实现。
实现方法:
? 这里是使用ajax来请求的,看起来和ajax没啥区别,其实还是有区别的。
? ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加