2011-03-02 4 views
0

두 사이트 products.company.combugzilla.internal.com이 있습니다. products.company.com 페이지에서 버그 정보에 액세스하고 싶습니다. jsonrpc 호출을 bugzilla.internal.com/jsonrpc.cgi으로 호출하기 위해 jQuery ajax 함수를 설정했습니다. 그러나 크로스 도메인 스크립팅 제한으로 인해 이것은 예상대로 아파치에 의해 차단되었습니다. 그럼 내가 products.company.com에 CGI 스크립트로 아약스를 촬영 한 후 bugzilla.internal.com/jsonrpc.cgi에 요청을 촬영하기 위해 해당 스크립트에 컬을 사용하지만, 지금은 당신이 에 액세스 할 수있는 권한이 없습니다다른 도메인에서 bugzilla 웹 서비스에 액세스하는 좋은 방법은 무엇입니까?

말한다 /jsonrpc.cgi

무엇을할까요?

작업을 단순화하면 get bug 기능 만 사용하고 싶습니다.

답변

1

products.company.com의 웹 서버가 Apache 인 경우 ProxyPass를 설정할 수 있습니다.

당신은 웹 서버 구성을 수정할 수없는 경우 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; 
1

몇 가지 옵션이 있습니다. products.company.com을 요청하여 bugzilla.internal.com에게 요청하고 기본적으로 프록시로 사용하도록 할 수 있습니다.

또 다른 옵션은 클라이언트에서 jsonp를 사용하는 것입니다. 이는 크로스 도메인 호출을 허용합니다. Here's jsonp를 시작하는 데 대한 IBM의 아주 좋은 기사입니다.

+1

jsonp는 다른 서버의 json 데이터 만 추출 할 수 있습니까? 제 상황에서는 json 데이터를 bugzilla 웹 서비스에 보내고 싶습니다. –

0

크로스 도메인 스크립팅 제한에 대한 몇 가지 작업 방법이있다합니다. 나는 그것을 테스트하지 않았지만, easyXDM는 당신이 원하는 것을하는 것처럼 보입니다.

관련 문제