tinyproxy를 역 프록시로 사용하여 교차 사이트 아약스를 수행하려고합니다. 다음은 설정입니다 :프록시가 작동하지 않는 크로스 사이트 아약스
- gentoo linux를 실행하는 데스크탑 시스템. IP 주소는 x.x.x.x입니다. Boa (웹 서버, 포트 80) 및 tinyproxy (http 프록시, 포트 8888)가이 시스템에서 실행 중입니다. 여기
테스트 파일입니다
======= a.html ======
<html>
<head>
<meta charset="UTF-8" />
<title>Ajax test</title>
</head>
<body>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" src="a.js"></script>
</body>
</html>
======= a.js = http://x.x.x.x:8888/outside/는 http://www.outside.com/에 갈 수 있도록 =======
$(document).ready(function() {
function error_func()
{
alert("error occurred");
}
function ajax_func(data)
{
alert("ajax received");
}
$.get("http://x.x.x.x:8888/outside/xyz.txt", ajax_func).error(error_func);
});
나는 tinyproxy를 구성했습니다. 그 도메인을 제어하고 그 안에 "test string"이라는 텍스트 파일 (xyz.txt)을 넣었습니다.
이제 firefox : x.x.x.x : 8888/xyz.txt에 다음 url을 넣으면 모든 것이 작동하고 브라우저 창에 "test string"이 표시됩니다. 하지만 파이어 폭스에 x.x.x.x/a.html을 넣을 때 "오류가 발생했습니다"라는 대화 상자가 나타납니다. 나는 IE, 사파리, 파이어 폭스, 그리고 크롬에서 이것을 시도했고 나는 그들 모두에서 "오류가 발생했다"대화 상자를 얻는다.
"동일한 출처 정책"을 알고 있으므로 그 한계를 극복하기 위해 tinyproxy를 사용하고 있습니다.
트래픽을보기 위해 gentoo Linux 시스템에서 wireshark를 사용했습니다. 모든 것이 괜찮아 보입니다. 파이어 폭스와 x.x.x.x 사이의 HTTP 트랜잭션을보고, x.x.x.x와 "외부"사이의 HTTP 트랜잭션과 x.x.x.x와 파이어 폭스 사이의 또 다른 HTTP 트랜잭션을 봅니다. HTTP 200 OK에는 "테스트 문자열"이 예상대로 포함되어 있습니다. 하지만 여전히 jquery가 행복하지 않고 "ajax received"대화 상자가 표시되지 않습니다 ...
한 가지 확실한 점은 HTTP "Server"헤더입니다. x.x.x.x 시스템에는 "Server : Boa"가 표시되지만 최종 응답에는 "Server : Apache"가 있습니다. 이 차이 때문에 동일한 기원 정책을 위반할 수 있습니까?
BTW, 왜냐하면 내가 (shoutcast)와 함께 일할 실제 서버에서, 나는 아무런 통제력도없고 JSONP를 지원하지 않기 때문에 JSONP를 사용할 수 없다 모든 API에 대해 이것은 기본 테스트를 설정하기위한 간단한 테스트에 지나지 않습니다. 따라서 jquery를 사용하여 xyz.txt 파일을 검색 할 수 있다면 다음 단계는 동일한 메커니즘을 사용하여 XML 데이터를 검색하기 위해 shoutcast에 API 호출을하는 것입니다. –
아마도 여기에 오타가 있지만 xxxx : 8888/xyz.txt'를 수동으로 테스트하고 javascript 파일에서'xxxx : 8888/outside/xyz.txt'를 입력하십시오. 그건 잘못이 아니지, 그렇지? – Roman
안녕하세요 로마인, 예, 오타입니다 ... 전체 링크 (신규 사용자)를 추가 할 수 없어 주변에서 물건을 잘라내야했습니다. –