Open jungmiin opened 1 year ago
CORS(Cross-Origin Resource Sharing) : 다른 출처로의 리소스 요청을 제한하는 것과 관련된 정책
SOP(Same-Origin Policy) : 동일한 출처에서만 리소스를 공유할 수 있다
동일 출처 정책이 필요한 이유 : 출처가 다른 두 어플리케이션이 자유로이 소통할 수 있도록 제약이 없다면, 해커가 CSRF(Cross-Site Request Forgery)나 XSS(Cross-Site Scripting) 등의 방법을 이용해서 우리가 만든 어플리케이션에서 해커가 심어놓은 코드가 실행하여 개인 정보를 가로챌 수 있다.
같은 출처(origin) & 다른 출처의 기준 : URL의 구성 요소 중 Scheme
, Host
, Port
이 3가지가 동일한가
ex)https://test.github.io:80
Scheme
: https://
Host
: test.github.io
Port
: 80브라우저별로 출처를 비교하는 로직이 구현되어 있음
프론트엔드 : Webpack Dev Server로 리버스 프록싱하기 프론트엔드 개발자는 대부분 웹팩과 webpack-dev-server를 사용하여 자신의 머신에 개발 환경을 구축하게 되는데, 이 라이브러리가 제공하는 프록시 기능을 사용하면 아주 편하게 CORS 정책을 우회할 수 있다.
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'https://api.test.com',
changeOrigin: true,
pathRewrite: { '^/api': '' },
},
}
}
}
이렇게 설정을 해놓으면 로컬 환경에서/api
로 시작하는 URL로 보내는 요청에 대해 브라우저는 localhost:8000/api
로 요청을 보낸 것으로 알고 있지만, 사실 뒤에서 웹팩이 https://api.test.com
으로 요청을 프록싱해주기 때문에 마치 CORS 정책을 지킨 것처럼 브라우저를 속이면서도 우리는 원하는 서버와 자유롭게 통신을 할 수 있다. 즉, 프록싱을 통해 CORS 정책을 우회할 수 있는 것이다.
cf. https://inpa.tistory.com/entry/WEB-📚-CORS-💯-정리-해결-방법-👏 https://evan-moon.github.io/2020/05/21/about-cors/