티스토리 뷰
오늘은 CORS,SOP에 대해서 공부한 뒤
node.js를 통해서 간단하게 서버를 구현해 보는 실습을 하였다.
api와 연결하거나, 서버와의 연결을 할 때 종종 아래 이미지를 본 적이 있을 것이다.
이 에러는 CORS policy만을 보고 CORS라는 것 때문에 발생하는 것 같지만,
SOP(Same-Origin Policy) 때문에 발생한다.
그렇다면 SOP와 CORS는 무엇일까?
SOP(Same-Origin Policy)는 동일 출처 정책을 뜻한다.
여기서 출처란 (프로토콜+호스트+포트)이며, 같은 출처의 리소스끼리만 공유가 가능하다는 뜻이다.
하지만, 다른 출처의 리소스를 사용할 때는
CORS(Cross-Origin Resource Sharing)를 사용한다.
CORS는 추가적인 HTTP 헤더를 적용하여, 다른 출처 자원에 접근 권한을 부여하는 체제이다.
오늘은 CORS의 동작 방식 중 하나인, 프리플라이트 방식으로 node.js에서
간단한 서버 실습을 진행하였다.
실습을 진행하며 Node.js HTTP 처리 과정을 파악하기 위해, 아래 링크를 참고하였다.
https://nodejs.org/ko/docs/guides/anatomy-of-an-http-transaction/
구현해야할 과제는 간단하였다.
문자를 입력하고 대문자 or 소문자 버튼을 눌러 서버로 요청한 뒤
받은 문자를 버튼에 맞게 변환해주고 다시 클라이언트에 응답해주는 예제이다.
단순한 요구사항 이었지만, 생각보다 구현에 있어서 애를 먹었다.
1. OPTIONS 메소드는 어디서 보내지는지 의문
2. 프리플라이트를 어떻게 처리해야될지 의문
이 두가지 질문에 막혀서 진행하는데 어려움을 겪었다.
1번 의문은 개념을 다시 보면서 이해를 했다.
Simple Request 조건
조건 1. 메서드 : GET, POST, HEAD
조건 2. 헤더 : Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width
조건 3. Content-type 값 : application/x-www-form-urlencoded, multipart/form-data, text/plain
즉 조건을 만족하지 않을 때, Preflight 요청을 날려버린다.
현재 보내는 조건의 Content-type값은 application/json이기 때문에,
브라우저에서 기본적으로 프리플라이트 요청을 하는 것이었다.
2번 의문은 개발자도구의 네트워크 창을 보고 이해할 수 있었다.
Preflight 요청을 한 뒤, fetch의 요청을 바로진행하는 것이었다.
하지만, 모든 요청이 Preflight와 함께 수행되는 것은 아니다.
요청 헤더의 "Access-Control-Max-Age": 10 은 10초동안 요청의 결과를 캐시한다라는 의미이므로
Preflight 요청은 10초동안 유효하며, 10초 이후에는 또 다시 Preflight 요청을 해주어야한다.
따라서 OPTIONS ,POST 요청이 들어오는 것을 처리해주며 해결하였다.
구현 예시
-끝-
'코드스테이츠' 카테고리의 다른 글
TIL 23.02.08 (0) | 2023.02.08 |
---|---|
TIL 23.02.07 (0) | 2023.02.07 |
TIL 23.02.03 (0) | 2023.02.04 |
TIL 23.02.02 (0) | 2023.02.02 |
TIL 23.02.01 (0) | 2023.02.01 |
- Total
- Today
- Yesterday
- til
- 백준
- Redux
- 프로젝트
- 기술면접
- dictionary
- 스택오버플로우
- BFS
- 인적성
- 프로그래머스
- seb
- React quill
- 코드스테이츠
- useContext
- 코테
- Python
- SEB43기
- 프리프로젝트
- 회고
- 그리디 알고리즘
- 감정 일기장
- 다이나믹 프로그래밍
- 프론트엔드
- SEB43
- 개인 프로젝트
- SEB 43기
- SEB 43
- dfs
- 브루드포스
- 감정일기장
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |