일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 향해99
- git
- 유령 의존성
- NextJs
- Passed by Value
- input error
- 인풋태그 엔터
- 원티트 프리온보딩인턴십 1주차
- 광고지구
- Client-Side Navigation
- toast err
- Mac OS NVM
- next/link
- CPU와 GPU의 차이점
- react
- 프로젝트
- JavaScript
- 원티드프리온보딩
- Til
- 식별자란
- Redux
- 회고록
- JS
- 알고리즘
- NVM
- 원티드인턴십
- jsEvent Loop
- react portal
- Node
- CloudFront 무효화
- Today
- Total
SUIN
CORS 본문
CORS(Cross-Origin Resource Sharing)
- 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다
- CORS 관련 이슈는 모두 CORS 정책을 위반했기 때문에 발생하는 것이다.
- 개발하는 입장에서는 정책 때문에 신경써야 하는 것들이 늘어나니 귀찮을 수도 있지만, 사실 CORS라는 방어막이 존재하기 때문에 우리가 이 곳 저 곳에서 가져오는 리소스가 안전하다는 최소한의 보장을 받을 수 있는 것이다.
출처(Origin)란?
- 출처(Origin)란 URL 구조에서 살펴본 Protocal, Host, Port를 합친 것을 말합니다. 브라우저 개발자 도구의 콘솔 창에 location.origin를 실행하면 출처를 확인할 수 있습니다.
CORS 동작원리
Simple request
CORS Preflight Request(사전 요청)을 발생시키지 않습니다. 보통 이런 요청들을 Simple Request라고 합니다.
단순 요청은 서버에 API를 요청하고, 서버는 Access-Control-Allow-Origin 헤더를 포함한 응답을 브라우저에 보냅니다. 브라우저는 Access-Control-Allow-Origin 헤더를 확인해서 CORS 동작을 수행할지 판단합니다.
[Simple Request 조건]
- GET / HEAD / POST 중 한 가지 메소드를 사용해야 한다.
- User agent에 의해 자동으로 설정되는 헤더(Connection, User-Agent 또는 Fetch spec에서 '금지된 헤더 이름(forbidden header name)'으로 정의된 이름들을 가진 헤더들)을 제외하고, Fetch spec에서 'CORS-safelisted request-header'라고 정의되어있고 수동 설정이 허용된 헤더들은 다음과 같다.
- Accept
- Accept-Language
- Content-Language
- Content-Type (but note the additional requirements below)
- DPR
- Downlink
- Save-Data
- Viewport-Width
- Width
- 오직 아래의 Content Type만 지정해야 한다.
- application / x-www-form-urlencoded
- multipart/form-data
- text/plain
Preflight request
- Preflight 요청은 서버에 Preflight request(예비 요청)을 보내서 안전한지 판단한 후 본 요청을 보내는 방법입니다.
OPTIONS 메서드로 서버에 예비 요청을 먼저 보내고, 서버는 이 예비 요청에 대한 응답으로 Access-Control-Allow-Origin 헤더를 포함한 응답을 브라우저에 보냅니다. 브라우저는 단순 요청과 동일하게 Access-Control-Allow-Origin 헤더를 확인해서 CORS 동작을 수행할지 판단합니다.
참고
'개발지식 백과사전' 카테고리의 다른 글
[브라우저 / 운영체제] CPU와 GPU의 차이점 (0) | 2023.04.18 |
---|---|
[네트워크] TCP 3-way-handshake , 4-way-handshake (0) | 2023.04.17 |
GET , POST 차이점 (0) | 2022.03.22 |
TCP 와 UDP (0) | 2022.03.22 |
callback , promise, async/await (0) | 2022.03.22 |