参见英文答案 > 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,如果被发现可能会被用户滥用,并引起法律上的麻烦.

jQuery – 如何清除跨域限制的更多相关文章

  1. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. 在IOS9中的Cordova应用程序使用JQuery / Javascript的window.history问题

    在两个测试用例中唯一改变的是Cordova.js.解决方法我看到这是几个星期前,但我会发布这个,以防其他人遇到它.听起来它可能与iOS9中的哈希更改生成的导航事件有关.如果是这样,可以将其添加到index.html以禁用哈希侦听:

  3. iOS 5上的jQuery事件

    解决方法在Apple开发论坛上由一个人回答:我需要在将元素添加到DOM之后才绑定(),如下所示:

  4. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  5. android – Phonegap本地构建 – jquery ajax错误:readystate 0 responsetext status 0 statustext error

    解决方法您是否在索引文件中包含了内容安全元标记?

  6. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  7. 设置焦点到输入框和显示Android键盘使用jquery手机在pageshow

    我正在设置焦点到输入框,并显示Android键盘使用jquery手机网页显示.我从Web上尝试过很多选项.但是没有一个在模拟器和移动设备中都能按预期工作.这是代码:查找屏幕截图以供参考请咨询…解决方法对我有用的解决方案

  8. android – 如何在焦点()上以编程方式隐藏jquery mobile中的键盘

    我想在Focus()上隐藏键盘,但是当$(“.ui-input-text”).focus();它会自动打开键盘.我只是想隐藏在特定的屏幕上,我用document.activeElement.blur()测试;但它也没有关注()输入.解决方法提交表单时,iOS键盘可能不会自动关闭.这是一个非常实用的问题,因为不应要求用户手动关闭键盘,否则他们不会期望需要这样做.可以通过调用document.acti

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. jQuery实现简单的抽奖游戏

    这篇文章主要为大家详细介绍了jQuery实现简单的抽奖游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. jquery-plugins – 是否可以使用猫头鹰旋转木马实现循环/无限轮播?

    我正在使用猫头鹰旋转木马,它的工作完美,除了它不支持循环/无限滚动.我没有搜索google和stackoverflow的想法,没有运气.有没有人在猫头鹰旋转木马上实现圆形/无限滚动?

  2. jQuery动态输入字段焦点

    我想使用以下jQuery向我的页面动态添加一个输入字段:在这样做之后,我希望输入字段具有闪烁的文本光标的焦点,所以我想在创建后立即输入.有人可以告诉我我该怎么办?

  3. jquery – 为什么$(window).height()这样错了?

    我试图获取当前浏览器的视口高度,使用但我得到的价值观太低了.当视口高度高达850px时,我从height()获取大约350或400像素的值.这是怎么回事?

  4. jquery – 如果在此div之外和其他draggables内部(使用无效和有效的还原选项),则可拖动恢复

    例如这样但是由于明显的原因,这不行.我可以说这个吗?

  5. 创建一个jQueryUI 1.8按钮菜单

    现在jQueryUI1.8已经出来了,我正在浏览更新,并且遇到了新的Buttonwidget,特别是SplitButtonwithadropdown的演示之一.这个演示似乎表明Buttonwidget可以在这里创建一个下拉菜单.作为讨论的问题,我想知道使用这个新的Button小部件来创建一个下拉菜单有什么方法.干杯.解决方法您必须在按钮下方列出一个列表,方式类似于此处为自动完成提供的演示:http

  6. 灰色divs使用JQuery

    我试图使用这个代码:为了淡出一大堆名为MySelectorDiv的div,唯一的是,它只会淡出第一个而不是所有的div,为什么呢?

  7. 使用jQuery动态插入到列表中

    我有两个订单列表在彼此旁边.当我从一个列表中选出一个节点时,我想按照字母顺序插入到另一个列表中.抓住的是我想要把一个元素放在另一个列表中,而不刷新整个列表.奇怪的是,当我插入到右边的列表中,它工作正常,但是当我插入到左边的列表中时,顺序永远不会出来.我也尝试将所有内容读入数组,并将其排序在一起,以防止children()方法没有按照显示顺序返回任何东西,但是我仍然得到相同的结果.这是我的jQuer

  8. 没有回应MediaWiki API使用jQuery

    我试图从维基百科获取一些内容作为JSON:但我没有回应.如果我粘贴到浏览器的地址栏,就像我得到预期的内容.怎么了?解决方法您需要通过添加&callback=?来触发具有$.getJSON()的JSONP行为?在querystring上,像这样:Youcantestithere.没有使用JSONP,你正在击中same-originpolicy,阻止XmlHttpRequest获取任何数据.

  9. jQuery Ajax请求每30秒

    我有这段代码,但是有些人在我的网站上的值可能会改变.我需要每30秒钟更新一次#financediv.这可以做吗解决方法您可以将代码放在单独的函数中,如下所示:然后每30秒建立一个定时器调用该函数:祝你好运!总结以上是DEVMAX为你收集整理的jQueryAjax请求每30秒全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  10. jquery – keypress事件在IE和Chrome中不工作,但在FF工作

    任何想法为什么会这样发生?我通常认为Chrome会更加宽容代码?这是我的按键键.我错过了什么吗?右图();和leftimage();是应该工作的功能,因为我在其他地方使用这些功能谢谢您的帮助!

返回
顶部