【问题标题】:"Access is denied" when attempting a cross domain connection to a JSON file尝试跨域连接到 JSON 文件时出现“访问被拒绝”
【发布时间】:2012-11-07 09:31:45
【问题描述】:

我在尝试访问不在我域中的服务器上的 JSON 数据时遇到访问错误。我尝试通过jQuery.support.cors = true;激活跨域功能,但还是遇到了同样的问题。

然后我找到了this example pagethis article 并充满希望,我试图去XDomainRequest 而不是XmlHttpRequest。不过,我得到了同样的错误。

当我在浏览器窗口中输入地址时,我会访问数据并可以在我的屏幕上看到它。我可以改变/寻找什么来使它工作? (我已经尝试了所有我能想到的例子,现在我画的是空白。)

我正在执行下面的代码。

var xdr = new XDomainRequest();
xdr.onload = function () { alert(xdr.responseText); }
xdr.open("GET", "http://blopp.json");
xdr.send();

我将无法要求我的用户激活任何内容。此外,我可能希望他们中的许多人在具有高限制的域上(90% 以上将在 IE 上,我希望至少是 8 版)。

编辑:

标题如下。

请求标头:

状态码:200 OK
请求标头视图已解析
GET /AppositelabRestService/api/EnvelopeTemplate/12345 HTTP/1.1
主机:apppositech.hosterspace.com
连接:保持活动
缓存控制:max-age=0
用户代理:Mozilla/5.0(Windows NT 6.2;WOW64)AppleWebKit/537.4(KHTML,如 Gecko)
Chrome/22.0.1229.94 Safari/537.4
接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
接受编码:gzip、deflate、sdch
接受语言:sv,en-US;q=0.8,en;q=0.6
接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3

响应标头 HTTP/1.1 200 正常
缓存控制:无缓存
编译指示:无缓存
内容类型:应用程序/xml;字符集=utf-8
过期:-1
服务器:Microsoft-IIS/7.5
X-AspNet-版本:4.0.30319
X-Powered-By:ASP.NET
日期:格林威治标准时间 2012 年 11 月 7 日,星期三 09:53:19
内容长度:394

【问题讨论】:

  • 服务器是否发送正确的 CORS 标头?它们是必需的。
  • 转到谷歌浏览器中的 URL,激活开发者工具中的网络选项卡并检查标题
  • @Esailija 什么是“正确的 CORS 标头”?我应该在那里看到什么?
  • Access-Control-Allow-Origin: yourwebsite.comAccess-Control-Allow-Origin: *
  • @Esailija 呵呵,我都看不到。为了完整起见,我在我的问题的更新中发布了标题。请看一看。

标签: javascript json cross-domain dynamics-crm xdr


【解决方案1】:

服务器必须通过发送 CORS (Cross-Origin Resource Sharing) 标头来明确允许它,例如:

Access-Control-Allow-Origin: *

否则适用同源政策,您不能这样做。

顺便说一句,flash使用crossdomain.xml,所以如果有服务器托管这样的文件,你可以通过flash发出请求。

很遗憾,http://appositech.hosterspace.com/crossdomain.xml 是 404。

【讨论】:

  • 所以,除非我能与服务提供商交谈并非常有说服力,否则我是不是被熏了?现在,我想起来了,也许我可以跳过 jQuery,我不必指定 $.support.cors = true; - 我只需要设计不同的标题,对吧?
  • @KonradViltersten 支持 IE8 我认为你需要一些黑客攻击是的,但如果标题在那里,那么它对于现代浏览器来说是开箱即用的。您还可以通过您的服务器代理请求。也就是说,向您的服务器发出 ajax 请求,服务器反过来向他们的服务器发出请求并返回响应。
  • +1(也是一个大的):牛屎……代码将在云中执行(Dynamics CRM),所以我也没有真正的服务器访问权限。至少没有任何保证的权利,呵呵。我认为我最好的方法是具有说服力。除非您对在这种情况下如何设置代理呼叫有很好的建议。还是谢谢!
猜你喜欢
  • 2021-07-10
  • 2016-01-13
  • 2015-03-06
  • 1970-01-01
  • 2018-02-12
  • 2021-07-08
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多