레이블이 Same Origin인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Same Origin인 게시물을 표시합니다. 모든 게시물 표시

2011년 10월 2일 일요일

AJAX Same Origin Policy 우회하기




Ajax의 Same Origin Policy 제약 때문에,
Ajax를 통해 제3의 OpenAPI를 이용하는 것이 불가능한 경우가 많다.

Ajax 요청이 들어있는 a.html 을 aaa.com 을 통해 열람한 경우,
bbb.com 에서 제공하는 OpenAPI를 XMLHttpRequest를 통해 접근할 수 없다.
접근 시도 시 status 가 200이 아니라 0가 된다.

이 문제를 해결하는 근본적인 방법이 W3C에서 CORS라는 이름으로 제공된 모양이다.

결론적으로 제3의 OpenAPI를 제공하는 측에서 CORS를 적용해야 가능하므로,
현재로서는 Same Origin Policy를 우회하는 Proxy를 하나 만드는 수 밖에는 없다.

JAVA든 ASP든 언어별로 별도로 HttpRequest를 날릴 수 있는 모듈을 이용하면 된다.
PHP의 경우 php_http 라는 extension이 필요한데, 윈도우 버전의 경우,
PHP에서 공식적으로 제안하는 방법은 Visual Studio로 컴파일하고 빌딩하여 DLL을 만들어 쓰라는거다. ㅠㅜ

DLL 만들 환경이 못 되는 경우는 어쩌란 말인가? 별도의 extension 없이 Core PHP에서 제공하는 file_get_contents()과 file_put_contents()를 이용한 Proxy를 하나 만들면 가능하다.
눈치 챘겠지만, file_get_contents()를 통해 bbb.com 의 데이터를 가져와서
file_put_contents()를 통해 ajax가 제공된 origin server인 aaa.com의 로컬에 ccc.xml 파일로 저장하고
ajax는 ccc.xml 에 XMLHttpRequest를 날려 데이터를 읽어올 수 있다.

코드 Snippet은 다음에...