CORS : Cross-origin resource sharing

 웹 브라우저들은 보안상의 이유로 javascript나 ajax로 외부 host로 접속하는 것을 막기 시작했다. 그래서 javascript를 Same Origin Policy(동일 출처 정책)라는 정책을 두어 다른 도메인의 서버에 요청하는 것을 보안문제로 간주하고 이를 차단한다. javascript는 자신이 속한 동일 도메인 내에서만 서버 요청을 허용하고 처리해 주겠다는 의미이다.



네 가지의 크로스 도메인 문제

1. 도메인은 같으나 서브도메인이 다르면 문제가 발생한다.

  www.xyz.com과 aaa.xyx.com 사이의 문제를 말한다.


2. 도메인이 다르면 문제가 발생한다.

 www.xyz.com과 www.abc.com 사이의 문제를 말한다.


3. 프로토콜이 다르면 문제가 발생한다.

 http에서 https로의 호출은 문제가 발생하지 않지만 https에서 http로의 호출은 문제가 발생한다.


4. 포트번호가 다르면 문제가 발생한다.

 http://zzz.com:8000 / http://zzz.com:8080 사이의 문제를 말한다.



프로토콜로 인한 크로스 도메인 오류 해결

 jsp 개발을 하면서 https에서 http로의 호출에서 크로스 도메인 문제가 발생했다. http에서 ajax로 폼 데이터를 넘기면 https에서 db에 insert를 하고 작성한 javascript를 response로 보내 http에서 실행하는 것이었다. 두 가지 방법의 해결법을 찾았다.


1. http로 접속하면 자동으로 https로 바꿔준다. 즉, 모든 페이지를 https로만 동작하게 한다.

1
2
3
4
5
String url = request.getRequestURL().toString();
if(url.startsWith("http://"&& url.indexOf("localhost"< 0) {
    url = url.replaceAll("http://""https://");
    response.sendRedirect(url);
}
cs


2. https의 jsp 파일에서 response 헤더필드에 Access-Control-Allow-Origin을 추가하여 해결했다.

     - 특정 host 접근 허용

1
Access-Control-Allow-Origin : http://www.xyz.com
cs


         - 모든 접근 허용

1
Access-Control-Allow-Origin : *

cs


모든 접근을 허용하게 되면 보안상의 문제가 발생할 수 있기 때문에 특정 host만 허용하도록 했다.

1
response.addHeader("Access-Control-Allow-Origin", "http://www.xyz.com");
cs




참고 : https://pedaler.github.io/CORS-%ED%81%AC%EB%A1%9C%EC%8A%A4-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%9D%B4%EC%8A%88%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC/

+ Recent posts