SOP (Same Origin Policy)
- 다른 출처의 리소스를 사용하는 것에 제한하는 보안 방식
- 출처란?
CORS (Cross-Origin Resource Sharing)
- 다른 출처의 자원을 공유
- 추가 HTTP 헤더를 사용하여, 한 출처에서 실행중인 웹 애플리케이션이
다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에게 알려주는 체제
CORS 접근제어 시나리오
✔ 단순요청 (Simple Request)
✔ 프리플라이트 요청 (Preflight Request)
✔ 인증정보 포함 요청 (Credentialed Request)
Preflight
- 사전 확인 작업
- OPTIONS 메서드를 통해 다른 도메인의 리소스에 요청이 가능한지 확인 작업
- 요청이 가능하다면 실제 요청(Actual Request)을 보냄
Preflight Requset
- Origin : 요청 출처
- Access-Control-Request-Method : 실제 요청의 메서드
- Access-Control-Requset-Headers: 실제 요청의 추가 헤더
Preflight Response
- Access-Control-Allow-Origin : 서버 측 허가 출처
- Access-Control-Allow-Methods : 서버 측 허가 메서드
- Access-Control-Allow-Headers : 서버 측 허가 헤더
- Access-Control-Max-Age : Preflight 응답 캐시 기간
==> Preflight Response가 가져야하는 특징
- 응답 코드는 200대여야 함
- 응답 바디는 비어있는 것이 좋음
Simple Request
✔ Preflight 요청 없이 바로 요청을 날림
✔ 다음 조건을 모두 만족해야 함
- GET, POST, HEAD 메서드
- Content-Type
A. application/x-www-form-urlencoded
B. multipart/form-data
C. text/plain
- 헤더는 Accept, Accept-Language, Content-Language, Content-Type 만 허용됨
왜 Preflight가 필요할까?
- CORS를 모르는 서버를 위해 ( 설정이 안된 서버)
Credentialed Request
- 인증 관련 헤더를 포함할 때 사용하는 요청
- 클라이언트측
credentials : include
- 서버측
Access-Control-Allow-Credentials : true
(Access-Control-Allow-Origin : * 은 안됨) ==> 정확한 오리진을 줘야함
CORS 해결하기
- 프론트 프록시 서버 설정 (개발환경)
- 직접 헤더에 설정
- 스프링 부트를 이용
'개발자노트 > 우아한 테코톡 감상' 카테고리의 다른 글
[10분 테코톡] 🐶 코기의 Servlet vs Spring ( Spring으로 Servlet을 다룬다는 것 ) (2) | 2022.09.11 |
---|---|
[10분 테코톡] 🎨 신세한탄의 CSR&SSR (0) | 2022.07.25 |
[10분 테코톡] 🕶 곤이의 DOM&BOM (0) | 2022.07.24 |
[10분 테코톡] 🦄 콜린의 Flex Layout (0) | 2022.07.23 |
[10분 테코톡] 🎉 동동의 CSS 방법론 (0) | 2022.07.23 |