종종 CORS에 대한 Error를 마주치는데 그냥 지나쳤던 CORS에 대해서 알아보자
<img>
, <script>
, <iframe>
, <link>
,등과 같은 태그는 외부자원을 임베딩하도록 지원해준다. (단 데이터 읽기는 불가!)이는 예비요청과 본요청으로 나뉜다.
예비요청으로 다른 도메인의 리소스에 요청이 가능한지 판단하고, 요청이 가능하다면 그때 본요청을 보낸다.
OPTIONS
메소드와 함께 2개의 요청헤더가 전송된다
Access-Control-Request-Method : POST
Access-Control-Request-Headers : X-PINGOTHER, Content-Type
Access-Control-Allow-Origin: http://foo.example # 서버측 허가출처
Access-Control-Allow-Methods: POST, GET, OPTIONS # 허가 메서드
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type # 서버측 허가헤더
Access-Control-Max-Age: 86400 # Prefilght 응답 캐시기간
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*"); // 모든 도메인
res.header("Access-Control-Allow-Origin", "https://example.com"); // 특정 도메인
});
CORS모듈사용
webpack-dev-server proxy 기능
리액트 개발환경에서 서버쪽 코드를 추가하지않고 프록시를 설정하면 서버에서 해당 요청을 받을 수 있다
package.json
에서 proxy
값을 설정해준다
여기서 proxy란?
"대리인"이라는 뜻으로 유저의 요청을 받아서 전달해주는 역할
여기서 유저<->naver 간의 Origin이 다르므로 proxy<->naver간의 Origin을 일치시켜 naver로부터 CORS가 가능하다