📌CORS(Cross-Origin Resource Sharing) 란 ?
출처가 다른 자원들을 공유한다는 뜻으로, 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록하는 개념입니다.
쉽게 말하자면, 웹 애플리케이션은 리소스가 자신의 출처(Protocol, Host, Port)와 다를 때, Cross-Origin Http 요청을 실행합니다. 예를 들어, https://123.456.789.123:9000 와 https://123.456.789.123:9001 는 서로 다른 Origin이므로 CORS가 발생할 것입니다.
따라서 다른 서버의 리소스를 불러오기 위해서는, 그 출처에서 CORS에 대한 내용을 Response의 헤더에 추가해줘야 합니다.
Error 확인하기
SOP 와 CORS의 비교
SOP | CORS |
서로 다른 출처일 때 리소르 요청과 응답을 차단하는 정책 | 서로 다른 출처라도 리소스 요청, 응답을 허용하는 정책 |
📌Preflight 란 ?
Preflight는 사전 점검이란 의미를 지니는 용어이며, 실제 요청 전에 브라우저에서 보내는 요청입니다. 현재 요청을 보내는 프론트가 백엔드 서버에서 허용한 Origin이 맞는지, 그리고 어떠한 HTTP 메서드들을 허용하는지 등을 확인합니다. 효율적인 통신을 위해 사용이 됩니다.
📌Preflight 적용하는 법
Preflight request가 이루어지기 위해 다음과 같이 설정해야합니다.
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// preflight 요청 넘기기
if (request.getMethod().equals("OPTIONS")) {
return true;
}
// token 검증하기
}
OPTIONS 메서드를 통해 서버가 어떤 method, header, content-type을 지원하는지 알아낼 수 있습니다.
<참고 자료>
https://velog.io/@serajang99/CORS-pre-flight%EC%98%88%EB%B9%84-%EC%9A%94%EC%B2%AD
https://docs.tosspayments.com/resources/glossary/cors
'Spring > Skill' 카테고리의 다른 글
[MyBatis] upsert (insert + update) mapper 작성법 (0) | 2024.03.18 |
---|---|
[Spring Data MongoDB] UpdateResult 와 WriteResult의 차이 (0) | 2024.03.12 |
[spring] OAuth2 네이버 인증하기 (0) | 2024.02.12 |
[Javascript] active 값 활성화하기 (0) | 2024.02.12 |
[spring] OAuth2 구글 인증하기 (0) | 2024.02.07 |