CORS(Cross-Origin Resource Sharing)

2024. 8. 11. 15:56·Computer Science/Network

CORS란

Cross-Origin Resource Sharing으로 교차 출처 리소스 공유라는 뜻이다. 다른 출처에서 리소스를 요청할 때 지켜야하는 정책이다. 여기서 출처(Origin)은 protocol, host, port까지 의미한다.

 

 

CORS HTTP 요청 방식

  1. 단순 요청을 보내는 것(Simple Request)
  2. 예비 요청을 보내서 확인 후 보내는 것(Preflight)
  3. 인증된 요청을 사용하는 방식(Credential Request)

 

Simple Request

예비요청없이 서버에 바로 요청을 보내는 방법이다. 서버에 바로 본요청을 보낸 뒤, 서버는 헤더에 ACCESS-CONTROL-ALLOW-ORIGIN 값 등을 붙혀서 보내주면 브라우저가 CORS 정책 위반 여부를 검사한다.

조건

  1. GET, POST, HEAD 요청이어야 한다.
  2. 유저 에이전트가 자동으로 설정한 헤더외에, 수동으로 설정할 수 있는 헤더는 Accept, Accept-Language, Content-Language, Content-Type 뿐이다.
  3. Content-Type 헤더는 application/x-www-form-urlencoded, text/plain, multipart/form-data 이어야 한다.
  4. 요청에 사용된 XMLHttpRequestUpload 객체에는 이벤트 리스너가 등록되어 있지 않아야 한다.
  5. 요청에 ReadableStream 객체가 사용되지 않아야 한다.
  6. Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-data, Viewport-width, width를 제외한 헤더를 사용하면 안된다.

 

 

Preflight Request

지금 보내는 요청이 유효한지를 확인하기 위해 OPTIONS 메서드로 예비 요청을 보내는 것이다.


왜 Preflight라고 부르는 것인가?

Simple Request와 달리, 먼저 OPTIONS 메서드를 통해 다른 도메인의 리소스로 HTTP 요청을 보내(preflighted) 실제 요청이 전송하기에 안전한 지 확인하기 때문이다.

 

조건

  1. PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH 방식을 사용하는 경우
  2. 금지된 헤더 이름을 사용하는 경우 - https://fetch.spec.whatwg.org/#forbidden-header-name
  3. 요청 페이로드 유형이 text/plain, multipart/form-data 또는 application/x-www-form-urlencoded 이 아닌 경우
  4. 하나 이상의 이벤트 리스너가 XMLHttpRequestUpload에 등록되어있는 경우

'Computer Science/Network' 카테고리의 다른 글
  • TCP 3, 4 way handshake
  • TCP와 UDP 차이
  • 브라우저에 www.google.com을 일어나는 일
  • [Network] foward & reverse proxy server
kimdozzi
kimdozzi
끝까지 포기하지 않으면, 내가 다 이겨!
  • kimdozzi
    도브로
    kimdozzi
  • 전체
    오늘
    어제
    • 분류 전체보기 (132)
      • Problem Solving (49)
        • Baekjoon (29)
        • Programmers (0)
        • LeetCode (17)
        • 삼성 유형 (2)
      • Computer Science (27)
        • Operating System (2)
        • Algorithms (13)
        • Network (6)
        • DataBase (6)
      • Backend (33)
        • JavaScript (0)
        • TypeScript (6)
        • Java (7)
        • Spring Boot (7)
        • Spring Security (6)
        • JPA (2)
        • Mybatis (1)
        • Junit5 (1)
        • Redis (3)
      • DevOps (14)
        • Git, Github (5)
        • docker (4)
        • AWS (3)
        • nginx (2)
      • etc (6)
        • IntelliJ (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 티스토리
    • 설정
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    타입스크립트
    docker image
    알고리즘
    구간 업데이트
    PrefixSum
    TypeScript
    티스토리챌린지
    오프라인 쿼리
    삼성기출
    인덱스 시그니처
    누적합
    점 업데이트
    imos법
    도커
    Bucket
    컨테이너
    인덱서블 타입
    segment tree
    python
    CORS
    인터페이스
    S3
    docker
    백준
    interface
    파이썬
    오블완
    AWS
    온라인 쿼리
    구간합
    세그먼트 트리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kimdozzi
CORS(Cross-Origin Resource Sharing)
상단으로

티스토리툴바