AJAX跨域解决方案

摘要

为了防止某些文档或脚本加载别的域名下的未知内容造成隐私泄露,破坏系统安全等行为。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代理等方法解决跨域问题。

shaw

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: