본문 바로가기

기타/HTTP

프로젝트에서 CORS(Cross Origin Resource Sharing) 문제

Front, Back 구분 지어서 프로젝트를 진행하게 되면 초기에 CORS라는 문제에 봉착하게 된다.

이 CORS는 브라우저에서 발생시키는 에러로써,

현재 브라우저 접속 (도메인+포트)과 다른 (도메인+포트) 자원을 요청했을 때 그 원인이 된다.

(현재 브라우저 접속 도메인+포트 VS  API 서버 (도메인+포트))

 

이는 브라우저와 같은 클라이언트에서 API 서버로 다이렉트로 요청을 하게 되었을 때의 문제를 차단하기 위한 것이고 이를 해결하려면 두 가지 방식이 있다..

CORS의 경우 브라우저가 아닌 서버 대 서버로 다른 도메인의 Request를 날려도 CORS 문제가 나지 않는 부분을 이용해 아래 2가지 방법을 고려해본다..

1. "프록시 방식" 으로 브라우저와 API 서버간에 웹 서버를 통해(웹서버로 접속한 도메인과 브라우저로 접속한 도메인이 같고.. 웹서버에서 API 서버로 Request를 날리면 서버간 Request를 날리면 CORS가 발생하지 않기 때문에 이 점을 이용한다.

1-1 운영시 브라우저->웹서버->WAS(API서버)

1-2 개발시 브라우저->프록시(웹팩config)->WAS(API서버)

 

2.  프록시 없이 브라우저에서 API서버로 다이렉트로 붙는 구조를 원한다면 Back-end에서 "Response Header" 의 "Access-Control-Allow-Origin" 값에 허용시킬 도메인을 지정한다.

2-1 추가로 도메인이 다른 경우 쿠키도 전송되지 않으므로 back-end에서도 credential:true, front에서도 axios 같은 http 클라이언트 라이브러리에서 widhCredentials: true 를 양측 모두에 값을 설정해줘야한다.

 

경험 상... 아니 단순히 생각해봐도 특별한 케이스가 아닌 이상 1번을 통해 CORS 문제를 해결하는 것이 가장 안전하고 Front, Back 서로 부담이 덜 갈 것이다..

아울러 React나 Vue 로 개발하는  경우 웹팩 config 부분에 proxy 속성이 있는데 여기에 도메인 값을 일치 시키면 문제가 해결된다.

 

'기타 > HTTP' 카테고리의 다른 글

GET vs POST 방식  (0) 2019.09.21