为了防止某些文档或脚本加载别的域名下的未知内容造成隐私泄露,破坏系统安全等行为。1995年,Netscape公司在浏览器中引入了同源策略(即协议、域名和端口都相同,简称“三同协议”)。同源策略是浏览器最核心也是最基本的安全策略。
要想解决跨域问题,我们首先要了解一下跨域问题的由来。
为了防止某些文档或脚本加载别的域名下的未知内容造成隐私泄露,破坏系统安全等行为。1995年,Netscape公司在浏览器中引入了同源策略(即协议、域名和端口都相同,简称“三同协议”)。同源策略是浏览器最核心也是最基本的安全策略。
同源策略对web访问做了两种限制:
1、不能通过AJAX的方法去访问非同源中的文档。
2、浏览器中不同域的框架之间是不能进行JS交互操作的。
但在实际开发过程中,web开发人员经常会受到同源策略的影响造成开发上的不便。因此,产生了一系列解决跨域问题的方案。
跨域资源共享(CORS)
CORS是W3C的一个标准,是一种允许当前域的资源被其他域的脚本请求访问的机制。使用CORS方式主要就是通过服务器端进行相关设置Access-Control-Allow-Origin: *(表示同意任意跨源请求)来进行实现的。如果浏览器检测到相应的设置,就可以允许AJAX进行跨域的访问。
特点:CORS需要浏览器和服务器同时支持,实现CORS通信的关键是服务器。整个CORS通信过程都是浏览器自动完成,不需要用户参与。
通过JSONP跨域
JSONP也叫填充式JSON,是应用JSON的一种新方法,它是一种被包含在函数调用中的JSON。
JSONP由回调函数和数据两部分组成,它是利用script标签可以在页面上引入不同域名上的JS脚本这一特点来实现的。
JSONP相比较于CORS,它的兼容性更好,但是它只支持GET这一种请求方式。
谷歌浏览器插件
如果你是为了学习一下AJAX的使用方法,你也可以借助谷歌浏览器的一款插件——allow control,下载安装之后,只要启用这个插件,你就可以愉快的使用AJAX进行跨域请求了。
其它解决方案
当然,你还可以通过document.domain、window.name、window.postMessage,PHP代理等方法解决跨域问题。