4

我们有一个 ASP.Net 应用程序托管在我们的网络上并暴露给特定的客户端。该客户端希望能够将数据从他们自己的服务器导入我们的应用程序。数据通过 HTTP 请求检索,并采用 CSV 格式。问题是他们不想将他们的服务器暴露给我们的网络并且请求在客户端完成导入(所有客户端都来自与他们的服务器相同的网络)。

所以,需要做的是:

  1. 他们从我们的服务器请求导入页面
  2. 页面上的客户端脚本向其服务器发出请求以获取 CSV 格式的数据
  3. 数据被发送回我们的应用程序

当两台服务器都在同一个域上时,这不是一个挑战:一个简单的隐藏 iframe 或类似的东西就可以解决问题,但我得到的是一个跨域“访问被拒绝”错误。他们还拒绝更改数据格式以返回 JSON 或 XML 格式的数据。

到目前为止,我尝试并学到的是:

  1. 隐藏的 iframe——“拒绝访问”
  2. XMLHttpRequest -- 行为取决于浏览器的安全设置:可能有效,在向用户发出安全警告时可能有效,或者可能根本无效
  3. 动态脚本标签——如果它们能够以 JSON 格式返回数据,它们就会起作用
  4. IE 客户端数据绑定——同样的“访问被拒绝”错误

在放弃之前我还有什么可以尝试的,并说如果不将他们的服务器暴露给我们的应用程序、更改他们的数据格式或更改他们的浏览器安全设置是不可能的?(顺便说一句,DNS 技巧不是一种选择)。

4

5 回答 5

3

如果他们可以以 JSON 格式提供数据,那么JSONP可能是您的答案。除此之外,您总是会遇到跨域调用的同源策略问题。您是否考虑过进行服务器端调用以向其服务器发出 HTTP 请求?

于 2009-08-07T11:20:54.907 回答
2

对您的客户来说可能为时已晚,但由于您可以控制这两个域,您可以尝试EasyXDM。它是一个包含跨浏览器怪癖的库,并提供了一个易于使用的 API,用于使用该浏览器的最佳可用机制在不同域之间的客户端脚本中进行通信(例如postMessage如果可用,其他机制如果不可用)。

警告:您需要控制两个域才能使其正常工作(其中“控制”意味着您可以在两个域上放置静态文件)。但是您不需要任何服务器端代码更改。

于 2010-05-04T17:54:40.750 回答
1

您的客户端是您的应用程序提供的 JavaScript,对吗?

然后,您的客户只能将请求发送到您的应用程序(跨站点脚本预防),您看到的错误是什么?

假设是,那么解决方案是让您的应用程序提供“代理”服务。您的浏览器代码可以向您的服务器询问一些数据。您的服务器可以自由地向它喜欢的任何服务器发出 Http 请求(没有浏览器反对)。因此,您实现了一个小服务来获取该 cvs 数据并将其呈现给您的应用程序。

如果您的客户端正在使用它,您甚至可以选择将该 CSV 数据映射到 JSON。

于 2009-08-07T11:21:42.517 回答
0

你不能只在他们的服务器上托管 JS 文件吗?这应该允许该文件中的脚本将 ajax 调用回其服务器。

于 2009-08-07T11:28:04.050 回答
0

你可以试试闪光灯。如果您将这个 yourdomain.com/crossdomain.xml 放在您的根目录中,您将能够从 mysite.com 发出跨域请求。

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="www.mysite.com" to-ports="25" />
</cross-domain-policy>
于 2009-08-07T11:49:21.637 回答