【问题标题】:javascript cross domain without jsonp and proxy没有jsonp和代理的javascript跨域
【发布时间】:2012-03-14 19:24:52
【问题描述】:

在我们的web应用程序中,我们做了一些ajax请求,所以我们可能会遇到跨域问题。

由于我们使用 ajax 来请求返回 xml 文档的标准 Web 服务。

所以我们不能使用jsonp。

我们也不想使用代理。由于服务器可能使用反向代理,在这种情况下代理可能不起作用。

那我想知道有没有其他方法可以解决这个跨域问题?


这里提到的服务是标准的 ogc web 服务。

An example.

Another example


更新2: 我们避免使用代理,因为我们在服务器使用反向代理时遇到了问题。

例如暴露的服务器地址是'http://100.1.1.1'。

我提出一个ajax请求:'http://100.1.1.1/proxy.ashx?url=http://100.2.2.2/xx.img'。

然后服务器'100.1.1.1'将此请求转发到IP为'192.168.1.1'的本地网络,然后proxy.ashx现在无法访问互联网'100.2.2.2'。所以 ... :(。

【问题讨论】:

  • 我还是不明白为什么你不能使用JSONP。
  • 如果我请求 http://server/service?xx=xx 然后我得到一个 xml 文档。 <xml ../><xxx><xxxx/>所以我不能在回调中包装xml文档。
  • 您对服务器有控制权吗?如果是,你可以让它输出 JSONP(与它的名字相反,响应根本不需要包含 JSON)。
  • @hguser:您的 JSONP 请求可以请求 http://server/jsonp?service=xx&xx,它将 XML 作为字符串参数输出到回调 (foo("<xml>...</xml")),然后您可以 parse in JavaScript,或者您可以检测&callback 参数中的 http://server/service?xx=xx 并做同样的事情。
  • @Felix Kling,@Matt:我们无法控制服务器,服务器提供的服务有其定义响应结果的标准。(xml 文档而不是纯文本)。查看我的更新。

标签: javascript cross-domain


【解决方案1】:

XHR2 允许跨域请求。如果您从中获取数据的网络服务允许CORS,您可以使用它——尽管您应该注意这是only supported in

  • 铬 3+
  • 火狐3.5+
  • Safari 4+
  • Internet Explorer 8+
  • Opera 12+

【讨论】:

  • 那么你必须使用 JSONP 或代理。
【解决方案2】:

我曾经尝试使用 Flex + crossdomain.xml,甚至 JavaFX 应用程序来做一些跨域工作

【讨论】:

    猜你喜欢
    • 2011-07-31
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 2013-01-04
    • 2014-05-18
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多