AJAX跨域问题解决一:使用web代理
2008-11-24 14:44
295 查看
ajax跨域的问题一直是个问题,呵呵!
上次我就是通过这种方式来解决的:通过web代理.
今天看到一个文章,不算翻译,只是把意思表达一下
原文地址:http://developer.yahoo.com/javascript/howto-proxy.html
原文名称:JavaScript: Use a Web Proxy for Cross-Domain XMLHttpRequest Calls
为什么需要一个代理
Yahoo! Web Service的PHP代理
其他解决方案
更多信息
但是,如果你的web应用程序在一个web服务器上而web服务数据请求另外一个如Yahoo! Web Service这样的服务器,那么服务器会从根本上限制本次连接.
这个问题有很多解决方案,最通用的就是在你的web服务器上安装一个代理.你可以通过调用自己的web服务代理来代替直接调用web服务的XMLHttpRequest对请求.然后代理传递请求到web服务,并且返回客户端应用程序所需要的数据.因为连接出自你自己的服务器,数据来自你自己的服务器,所以你的浏览器不会受到什么限制.
出于安全考虑,你web服务器上安装的任何代理被限制使用是一个好主意.转发连接到任意网站url的开放式代理会被滥用.尽管很难限制连接只能来自你自己的应用程序,但是你可以阻止代理去连接那些你没有指定的服务器. Hard code the URL to connect to in the proxy itself 或者提供限制选项.这可以使得代理对不是你的客户端应用程序的用户较低的开放和较少的应用.(A)
使用阿帕奇的
使用json或者动态<script>标记来替代xml和XMLHttpRequest.你可以通过直接在<script>标记内发送你的web服务请求,这样就可以完全绕过浏览器的安全限制.你使用的yahoo服务能够输出JSON(使用output=json和callback=function参数),当页面加载完成后从web服务返回的数据已经被优化为javascript对象.参见JSON Documentation.
对你的脚本进行数字签名.在FireFox中,你可以为你的脚本和那些信任站点的脚本申请一个数字签名.这样FireFox就会允许你通过XMLHttpRequest访问任何的域.但是,其他浏览器不支持这种方式的脚本签名,所以,这种解决方案会受限.
-------------------------------------------------------------------------------------------------------------------------------------------------------
前端时间用到了ajax的跨域,我采用的方法就是采用本文介绍的方法,其实这种方法的优点还是很多的,比如:简单,易于控制.业务逻辑和实现都不复杂.
另外这种方式还可以实现一个好处,隐藏信息,这就是文中A处所说的问题
加入我们的请求为:http://www.abc.com/person?key=asdfghjkl
数据返回此帐户的在线银行余额(完全是假设)
我们不想让别人知道传递的关键字为asdfghjkl,那么我们在前台完全可以采用
请求为: http://www.myweb.com/person?key=a或者http://www.abc.com/person?key=123456
访问我们自己的网站,通过自己的后台去对key进行重新的处理,这样保证了隐私保护.
上次我就是通过这种方式来解决的:通过web代理.
今天看到一个文章,不算翻译,只是把意思表达一下
原文地址:http://developer.yahoo.com/javascript/howto-proxy.html
原文名称:JavaScript: Use a Web Proxy for Cross-Domain XMLHttpRequest Calls
Javascscript:使用web代理解决XMLHttpRequest跨域调用问题
XMLHttpRequest对象(IE中的XMLHTTP对象)是当今尤其是ajax的web应用程序的核心.但实际上,使用此对象来编写客户端web应用程序会在跨域的网络连接上受到web浏览器的严重限制.本篇”HOWTO”文章会简单的描述本问题,简单的去理解并且提供一个可行的解决方案:web代理,(它可以)从你的web服务器转发网络请求到类似Yahoo! Web Service APIs这样的服务(提供者).为什么需要一个代理
Yahoo! Web Service的PHP代理
其他解决方案
更多信息
为什么需要一个代理
所有的现代web浏览器在网络连接的时候会强制执行一个安全限制,其中就包括调用XMLHttpRequest.此安全限制阻止脚本或者应用程序连接任何其他的不是来自本域的web服务(IE下可通过修改开启选项来允许跨域请求).如果你的web程序和程序说使用的XML数据来自同一服务器,那么它将不会遵循这个安全限制.但是,如果你的web应用程序在一个web服务器上而web服务数据请求另外一个如Yahoo! Web Service这样的服务器,那么服务器会从根本上限制本次连接.
这个问题有很多解决方案,最通用的就是在你的web服务器上安装一个代理.你可以通过调用自己的web服务代理来代替直接调用web服务的XMLHttpRequest对请求.然后代理传递请求到web服务,并且返回客户端应用程序所需要的数据.因为连接出自你自己的服务器,数据来自你自己的服务器,所以你的浏览器不会受到什么限制.
出于安全考虑,你web服务器上安装的任何代理被限制使用是一个好主意.转发连接到任意网站url的开放式代理会被滥用.尽管很难限制连接只能来自你自己的应用程序,但是你可以阻止代理去连接那些你没有指定的服务器. Hard code the URL to connect to in the proxy itself 或者提供限制选项.这可以使得代理对不是你的客户端应用程序的用户较低的开放和较少的应用.(A)
Yahoo! Web Service的PHP代理
(省略...)其他解决方案
除了通过使用web代理来转发应用程序的服务数据外,还有其他几种方式来绕过浏览器的跨域限制.使用阿帕奇的
mod_rewriteor
mod_proxy来从你的服务器上转发到另外的服务器.在你的客户端代码中你只要做请求就可以了,就好象工作在你自己的服务器上-------不会有浏览器的限制问题.然后阿帕奇会神奇的为你请求其他服务器.
使用json或者动态<script>标记来替代xml和XMLHttpRequest.你可以通过直接在<script>标记内发送你的web服务请求,这样就可以完全绕过浏览器的安全限制.你使用的yahoo服务能够输出JSON(使用output=json和callback=function参数),当页面加载完成后从web服务返回的数据已经被优化为javascript对象.参见JSON Documentation.
对你的脚本进行数字签名.在FireFox中,你可以为你的脚本和那些信任站点的脚本申请一个数字签名.这样FireFox就会允许你通过XMLHttpRequest访问任何的域.但是,其他浏览器不支持这种方式的脚本签名,所以,这种解决方案会受限.
-------------------------------------------------------------------------------------------------------------------------------------------------------
个人经验
前端时间用到了ajax的跨域,我采用的方法就是采用本文介绍的方法,其实这种方法的优点还是很多的,比如:简单,易于控制.业务逻辑和实现都不复杂.另外这种方式还可以实现一个好处,隐藏信息,这就是文中A处所说的问题
加入我们的请求为:http://www.abc.com/person?key=asdfghjkl
数据返回此帐户的在线银行余额(完全是假设)
我们不想让别人知道传递的关键字为asdfghjkl,那么我们在前台完全可以采用
请求为: http://www.myweb.com/person?key=a或者http://www.abc.com/person?key=123456
访问我们自己的网站,通过自己的后台去对key进行重新的处理,这样保证了隐私保护.
相关文章推荐
- 使用ajax的跨域问题解决方法
- 使用PHP解决AJAX跨域问题
- JQuery使用Ajax引发的跨域问题和解决方法
- 使用ajax的跨域问题解决方法
- 利用AJAX跨域读取RSS---使用AJAX代理解决AJAX跨域问题
- 使用JQUERY解决AJAX的跨域问题
- 使用HTML5中postMessage知识点解决Ajax中POST跨域问题
- 使用HTML5 跨域共享特性解决AJAX跨域数据同步问题
- 使用JQUERY解决AJAX的跨域问题
- 学习笔记——使用ajax()方法解决跨域问题
- 使用SpringMVC解决Ajax跨域问题
- 解决在java的ssm框架中使用ajax提交数据遇到的跨域问题
- 前端使用Jquery的getJSON方法,后台使用PHP,解决IE和火狐Firefox中存在的跨域ajax请求问题。
- ajax使用jsonp解决跨域问题
- 使用jsonp解决ajax请求json跨域问题
- 解决js使用ajax访问的跨域问题
- 使用jsonp及jquery的$.ajax解决跨域问题
- 前端使用ajax发送jsonp格式解决跨域访问的问题
- 使用HTML5 跨域共享特性解决AJAX跨域数据同步问题
- 使用nginx解决跨域问题(flask为例)