我有两个网站products.company.com
和bugzilla.internal.com
。我想从products.company.com页面访问错误信息。我设置了一个jQuery ajax函数来对bugzilla.internal.com/jsonrpc.cgi
进行jsonrpc调用。但是由于跨域脚本限制,这被apache阻止(正如预期的那样)。然后我将ajax拍摄到products.company.com上的cgi脚本,然后在该脚本中使用curl将请求发送到bugzilla.internal.com/jsonrpc.cgi
,但现在它说
您无权访问 /jsonrpc.cgi
怎么办?
如果它使任务更简单,我只想使用get bug功能。
答案 0 :(得分:1)
你有几个选择。您可以products.company.com
向bugzilla.internal.com
发出请求,并将其作为代理。
另一种选择是使用来自客户端的jsonp - 这将允许跨域调用。 Here's关于jsonp入门的一篇非常好的IBM文章。
答案 1 :(得分: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;
答案 2 :(得分:0)
有几种解决跨域脚本限制的方法。我没有测试过,但是easyXDM似乎做了你想做的事。