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은 다음에...

댓글 없음:

댓글 쓰기