0

我有两个网站products.company.combugzilla.internal.com. 我想从 products.company.com 页面访问错误信息。我设置了一个 jQuery ajax 函数来对bugzilla.internal.com/jsonrpc.cgi. 然而,由于跨域脚本限制,这被 apache 阻止(如预期的那样)。然后我将 ajax 拍摄到 products.company.com 上的 cgi 脚本,然后在该脚本中使用 curl 将请求发送到bugzilla.internal.com/jsonrpc.cgi,但现在它说

您无权访问 /jsonrpc.cgi

该怎么办?

如果它使任务更简单,我只想使用获取错误功能。

4

3 回答 3

1

你有几个选择。您可以products.company.com发出请求bugzilla.internal.com并让它基本上充当代理。

另一种选择是从客户端使用 jsonp - 这将允许跨域调用。这是一篇关于 jsonp 入门的非常好的 IBM 文章。

于 2011-03-02T03:11:26.200 回答
1

如果您在 products.company.com 上的 Web 服务器是 Apache,您可以设置 ProxyPass。

如果您无法修改 Web 服务器配置,那么 products.company.com 上的简单代理 cgi 可以解决问题:

#!/usr/bin/perl

use LWP::UserAgent;
use CGI qw(:standard);



my $URL='http://bugzilla.internal.com/jsonrpc.cgi';

my $q = new CGI;
my $query = &query_string();

my $req = HTTP::Request->new(POST => $URL);
$req->content_type('application/x-www-form-urlencoded');
$req->content($query);

my $ua = LWP::UserAgent->new;
$res = $ua->request($req);

if ($res->is_success) {
   printf "Content-Type: %s\n\n", $res->header('Content-Type');
   print $res->content;
} else {
   printf "Content-Type: text/plain\n\n";
   print "Error: " . $res->status_line . "\n";
}



print $cgi->header(-type => 'text/xml');
print $response->decoded_content;
于 2011-03-02T10:19:31.537 回答
0

跨域脚本限制有几种变通方法。我还没有测试过,但是easyXDM似乎可以做你想做的事。

于 2011-03-02T10:44:33.183 回答