微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jQuery – 如何清除跨域限制

参见英文答案 > Ways to circumvent the same-origin policy11
我正在开发一个用于移动的网络应用程序,jsonp对于跨域请求来说非常酷,但服务器的API不支持回调参数.所以我可以使用json从远程服务器获取数据.

我在jQuery中尝试过json,似乎不支持跨域请求.我在safari上尝试过原始的ajax请求功能,它在跨域运行良好,所以我可以在jQuery中删除跨域的json请求的跨域限制吗? (不是jsonp,只有json),怎么办?

还是有任何其他简单的ajax库(跨网络浏览器),并且可以在跨域请求上执行json.

解决方法

同源政策

您正在尝试规避Same Origin Policy.它内置在每个浏览器中,通常不是您可以或应该禁用/解决方法/等等.这是您网站,用户用户浏览器之间非常重要的安全合同.

CORS(可能)

CORS允许您的Web服务器通知浏览器/客户端访问另一个域是允许的.通过Web服务器输出以下HTTP头来完成此操作

Access-Control-Allow-Origin: http://www.example.com

如果您无法控制HTTP头,则不能使用CORS.实现这个是具体的语言/框架.

请注意,您应该检查,以确保browser compatibility因为IE8 / 9有限的支持.还要注意,这是一个潜在的攻击向量.如果不负责任地使用响应数据,它允许第三方站点的响应执行XSS攻击.

JSONP(可能)

JSONP是一种聪明的方式,通过动态添加一个等于“yoururl.com?”和“参数数据”的src atrribute的脚本标签来在服务器之间传递和获取数据.到你的页面没有Web代理(见下文)或小程序(Flash / Java)完成这样的专长是唯一合法的方式.但是如果您不是请求的两端的提供者,它确实有自己的安全隐患.请记住,JSONP允许远程服务器在您的上下文中执行代码,您应该是very careful who you give that power to.

“香草”AJAX(不可能)

如果您没有使用JSONP来获取数据,那么您最有可能尝试使用AJAX请求来获取数据. AJAX请求也受到同源策略的约束. JavaScript库(例如jQuery,Prototype,Dojo等)无法绕过此策略作为Ajax请求的基本行为.然而,他们可以支持JSONP(现在记得不是AJAX).

AJAX w / Web Proxy(可能)

如果您想要从其他服务器请求数据,则可以转发您的请求.您的主要站点的服务器将作为代理.您将需要向自己的服务器发出一个AJAX请求,那个服务器端代码然后会向其他域发出请求,然后通过AJAX调用响应将响应发送到您的脚本.

这是一个常见的模式,这里详细说明了Web Proxy Pattern和雅虎here (but remember it’s Yahoo specific,just take the general idea)的价格.但服务器端的语言依赖.总体实现将是一样的,但是代码将根据您选择的服务器端语言(PHP,Ruby,Python,C等)而有所不同.一些语言已经有了library / modules / etc来支持这种模式.

Flash(可能,非认)

处于认状态的Flash不支持跨域请求.它可以在带有cross-domain policy files的Flash7中打开,但反对强烈建议.您的脚本将不得不与Flash API接口,这将使得请求返回到JavaScript中.

Java Applet(可能,非认)

Java也受到同样的起源策略,但是与described here on its release有类似的Flash作业.

各种其他“黑客”

那里还有其他的黑客,但是他们通常要求你控制两端,或者有一个商定的沟通标准.例如’window.name’hack.我不建议大多数这些方法.

其他解决方

已经提出了类似的另一个问题.它概述了我没有涵盖的其他一些方法Ways to circumvent the same-origin policy

最佳解决方

> CORS – 如果您信任第三方
> Web代理 – 如果没有

您自己的域上的Web代理可以允许您清理正在检索的数据,它为您的用户提供最大的保护.然而,如果你做零卫生,这不比这里概述的方法更安全.如果您实施某种网络代理,请确保其请求仅限于所需网站.否则,您将基本上创建一个open proxy,如果被发现可能会被用户滥用,并引起法律上的麻烦.

原文地址:https://www.jb51.cc/jquery/176521.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐