什么是跨域?
所谓跨域, 就是当前域到了另外的域,域不仅仅指的是不同的域名网站,可能同一个域名不同的端口号也算不同的域。浏览器是有规则的,只要协议、域名、端口有任何一个不同,都被当作是不同的域。协议指的是http,或者https等。
下面给出一个列表,指出不同域的情况:
注:
主域名
(Domain Name,现也有简称为”Domain”),是用作识别您的网站,例如 yourdomain.com。 域名比IP地址更容易记住,可以让大众更快捷容易地通过域名找到你的网站。
域名,是没有重复的,一个域名只会代表一个位置,您选定一个独一无二的主域名后,需向认可的域名注册商注册您域名。 我们亦可为您注册域名。子域名
是一个另外的网页,有独立不同的内容,但不是一个新的域名。 子域名是无须申请的,当你登记了你自己的域名后,你就可以在你的域名前加上任何子域名。
例如:en.yourdomain.com 是 yourdomain.com 的子域名。
同源策略
基于网络安全的
同源策略
( MDN解释 )的限制,正常情况下我们不能在不同域操作不同域下的对象的,比如a.com域下操作b.com域的数据。但也有特殊情况,有些情况是要访问到别的网站的,比如加载一张图片,这张图片可能在别的网站,还有加载一个js文件,也是有可能在别的网站的,还有嵌入一个frame元素,也可以访问到别的网站的内容。
跨域方式
所以跨域正是利用了上面几点,比如:
jsonp
利用加载js文件的功能,在script
标签中的src
指定为目标网站的js.同理,还有image
标签的src属性也可以跨域。iframe
能直接加载别的网站的内容到自己的网站里来,从iframe
加载内容到本站后,两边是存在着数据交互的,可以用document.domain
,window.name
。- 在
HTML5
中引进了一个叫window.postMessage
方法来跨域传送数据,这其实也是利用了iframe
。- 除此之外,还有
flash
,服务器代理等跨域方法
接下来就详细地讲下前端怎么解决跨域问题。