Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Tags more
Archives
Today
Total
관리 메뉴

작은 지식주머니

CORS란? 본문

TID (Today I Do)

CORS란?

작지 2022. 1. 27. 17:30

!개인 공부용 입니다. 다소 틀린점 부족한점이 있을 가능성이 농후합니다.

 

Spring Boot REST환경 구축중 CORS 규정 위반 에러에 걸려 해결법을 찾았지만

CORS에 대한 개념이 별로 없기 떄문에 따로 글을 작성해보았습니다.

 

CORS란

 

  • 교차 출처 리소스 공유 Cross-Origin-Resource-Share의 약자.

처음 리소스를 제공한 도메인(Origin)이 현재 요청하려는 도메인과 다르더라도 요청을 허락해 주는 웹 보안 방칙.

 

CORS 체제는 브라우저와 서버 간의 안전한 교차 출처 요청 및 데이터 전송을 지원.

최신 브라우저는 XMLHttpRequest 또는 Fetch 같은 API에서 CORS를 사용하여 교차 출처 HTTP 요청의 위험을 완화.

 

 

CORS의 동작 방식

 

웹은 다른 출처의 리소스를 요청할 떄 HTTP 프로토콜을 사용해서 요청을 하는데 이떄 브라우저는 요청 헤더에
Origin 필드에 요청을 보내는 출처를 담아서 전송.

 

서버는 요청에 대한 응답을 하는데, 응답 헤더에 Access-Control-Allow-Origin 이라는 값에
'해당 리소스를 접근하는 것이 허용된 출처'를 내려준다.

 

이후 응답을 받은 브라우저는 자신이 보냈던 요청의 Origin과 서버가 보내준 응답의 Access-Control-Allow-Origin

을 비교, 응답이 유효한지 아닌지 결정.

 

 

CORS 동작 시나리오

  • Preflight Request

    • Preflight 방식은 요청을 한번에 보내지 않고 예비 요청, 본 요청을 나누어 서버에 전송하는것.

      본 요청을 보내기 전 미리 예비로 보내는 요청을 Preflight라고 하며 Http 메서드 중 Options를 사용

  • Simple Request

    • 예비 요청을 보내지 않고, 서버에게 바로 본 요청을 전송하는 방법.
      이 후 서버가 응답 헤더에 Access-Control-Allow-Origin 과 같은 값을 보내주면 그떄 브라우저
      CORS 정책 위반 여부를 검사

    • 동작 조건으로 요청의 메서드는 GET, HEAD, POST 중 하나여야 한다.

    • Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width 외의 다른 헤더를 사용하면 안된다.

    • 만약 Content-Type를 사용하는 경우에는 application/x-www-form-urlencoded, multipart/form-data, text/plain만 허용된다.
  • Credentialed Request

    • 인증된 요청을 사용하는 방법.

    • 다른 출처 간 통신의 보안을 강화할 떄 사용. 브라우저가 제공하는 비동기 리소스 요청 API
      XMLHttpRequest 객체 or fetch API는 별도의 옵션 없이 브라우저의 쿠키 정보나 인증과 관련된 헤더를
      함부로 요청에 담지 않는데 이떄 요청에 인증과 관련된 정보를 담을 수 있게 해주는 옵션이
      Credentials 옵션

    • Credentails의 세가지 옵션
      • same-origin: 같은 출처 간 요청에만 인증 정보를 담을 수 있다.
      • include: 모든 요청에 인증 정보를 담을 수 있다.
      • omit : 모든 요청에 인증 정보를 담지 않는다.

    • 동작 조건
      • 명시적인 URL을 설정해야 한다. EX) Access-Control-Allow-Origin : https://???.com
      • 응답 헤더에는 반드시 Access-Control-Allow-Credentials: true로 설정해야함.

 

 

Reference

https://velog.io/@pilyeooong/CORS%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

https://evan-moon.github.io/2020/05/21/about-cors/#credentialed-request


 

'TID (Today I Do)' 카테고리의 다른 글

CRA 없이 직접 React 빌드해보기.  (0) 2023.07.27
JAVA 기술 면접 대비  (0) 2022.02.24
spring @Transactional  (0) 2022.01.26
REST 개념공부  (0) 2022.01.25
Comments