5

我正在使用具有多个子域的 Intranet。我可以控制每个子域,因此跨站点请求的安全性不是问题。我有带有 JSON 响应的 PHP 脚本,我想从多个子域调用而不重复。对于 GET 请求,我可以使用 AJAX 和 JSONP 执行此操作,但这不适用于 POST 请求。我看到了一些替代方案,但似乎都不是很好:

  • 以最小的响应发布到本地子域上的副本,然后使用 JSONP 从中央位置获取完整响应
  • 使用 JSON POST 和 GET 到本地子域上的副本
  • 使用 mod_rewrite 在后端使用带有中央脚本的本地 URL 和 JSON
  • 使用符号链接在后端使用带有中央脚本的本地 URL 和 JSON

我错过了一些更简单的东西吗?你会在这里做什么?

4

4 回答 4

2

您可以在服务器端编写一个简单的反射器。向每个域添加一个脚本,将您的 ajax 请求简单地传递到相应的域。该脚本可以非常简单(1 或 2 行代码),避免您的跨站点脚本问题,并且意味着您不需要在现有脚本中复制复杂的业务逻辑。

它会给您的服务器带来额外的工作,但这对您来说可能不是问题。

我可以在我管理的网站上找到的最接近的示例代码如下。在这里,我们需要能够在 HTTPS 连接上使用 Googles Chart API(它还不支持)。解决方案是添加以下脚本来传递调用...

<?php
// Set header so our output looks like a PNG
header("Content-Type: image/png");

// Reflect the image from googles chart API
echo file_get_contents('http://chart.apis.google.com/chart?'.$_SERVER['QUERY_STRING']);
?>
于 2008-10-16T07:20:29.263 回答
2

看看这个https://developer.mozilla.org/En/HTTP_access_control页面。您需要的所有东西 - 将标头添加到所有接受发布请求的脚本中。例子:

于 2009-09-11T12:45:30.557 回答
0

在这种情况下,我使用 REST 方法。搜索 google 以获取有关 REST 的更多信息。

于 2008-10-16T06:45:40.423 回答
0

如果它们都是同一个域的子域,您可以将此代码添加到每个页面:

document.domain = 'domain.com';

然后,只需使用普通的 xmlHttpRequest。

于 2008-10-29T05:16:38.470 回答