티스토리 뷰
목차
CORS
교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여
웹 애플리케이션이 다른 출처의 선택한 리소스에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 메커니즘이다.
여기서 다른 출처란 프로토콜, 도메인, 포트가 다른 곳을 가리킨다.
계속해서 CORS 정책을 지킨 요청이란 대상 리소스에서 올바른 CORS 헤더가 담긴 응답을 받는 요청이라 할 수 있다.
참고로 교차 출처 요청이 발생할 시 브라우저는 요청 헤더에 Origin을 담아서 보낸다.
또한 올바른 CORS 헤더란 보통 아래와 같은 "Access-Control-Allow-Origin:" 헤더를 말하며
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 00:23:53 GMT
Server: Apache/2
Access-Control-Allow-Origin: *
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/xml
[…XML Data…]
브라우저는 클라이언트와 서버 사이에서 Origin 값과 Access-Control-Allow-Origin 헤더를 확인해 이후의 동작을 결정한다.
이어서 CORS는 크게 세 가지 시나리오에 따라 동작하는데, 이는 요약하면 아래와 같다.
- Preflighted Request - OPTIONS 메서드를 사용한 예비 요청
- Simple Request - 예비 요청 없이 바로 메서드 전송. 몇 가지 제약조건이 있다.
- 메서드는 GET, POST, HEAD 중 하나
- 헤더는 Accept, Accept-Language, Content-Language, Content-Type 만 허용
- Content-Type 헤더는 다음의 값들만 허용
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
- Requests with Credentials - 미리 인증된 요청을 사용. credentials 옵션을 사용한다. 다음의 세 가지가 있다.
- same-origin(default) - 동일 출처 간 요청에만 인증 정보를 담을 수 있다.
- include - 모든 요청에 인증 정보를 담을 수 있다.
- omit - 어떤 요청에도 인증 정보를 담지 않는다.
CORS on Spring
스프링을 사용해 서비스를 구성할 때 CORS 설정을 하는 방법은 크게 세 가지 정도가 있다.
API Endpoint
해당 요청을 받는 메서드나 클래스 위에 @CrossOrigin 애너테이션을 달고 허용할 도메인을 설정하는 방식이다.
단독으로도 물론 설정이 가능하지만, 아래의 설정과 결합해
간단하고, 섬세한 설정을 API별로 구성할 수 있다는 장점이 있다.
Spring MVC
WebMvcConfigurer를 상속하는 설정 클래스를 만들어 그 안의 addCorsMapping를 오버라이딩 하는 방식이다.
허용 도메인, 메서드, 헤더, Credential설정 등을 전역적으로 할 수 있다.
구조상 시큐리티 필터가 먼저 처리되지만, 해당 방법을 구현해놓으면 시큐리티 필터가 알아서 탐지해서 활용한다.
Spring Security
시큐리티 설정파일의 필터 체인 안에 cors() 메서드를 끼워 넣는 방식이다.
마찬가지로 허용 도메인, 헤더, Credential 설정 등을 전역적으로 할 수 있다.
스프링 시큐리티 필터가 사용자와 가장 가까운 곳에서 요청을 처리하기 때문에
두 프레임워크를 함께 사용한다면 이쪽에서 처리하는 것이 합리적으로 보인다.
'Development > Technical Interview' 카테고리의 다른 글
[면접 준비 - Network]URI/URL/URN (1) | 2022.12.16 |
---|---|
[면접 준비 - Network]양방향/단방향 암호화 (1) | 2022.12.16 |
[면접 준비 - Network]쿠키, 세션, 토큰, 그리고 (5) | 2022.12.16 |
[면접 준비 - CS]Garbage Collection, G1GC, 그리고 (3) | 2022.12.15 |
[면접 준비 - Algorithm]재귀 함수 vs. 반복문 (2) | 2022.12.14 |
[면접 준비 - Algorithm]재귀, 재귀 함수 (0) | 2022.12.14 |
- Total
- Today
- Yesterday
- 맛집
- 야경
- 남미
- Python
- 세모
- 칼이사
- 지지
- 백준
- a6000
- 유럽
- Backjoon
- spring
- Algorithm
- 세계여행
- 파이썬
- 세계일주
- 기술면접
- 유럽여행
- 면접 준비
- 스트림
- 중남미
- 스프링
- BOJ
- 동적계획법
- RX100M5
- 리스트
- 자바
- 여행
- java
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |