lunchScreen/Interview_Questions

CORS란 무엇인가요?

Opened this issue · 2 comments

CORS란 무엇인가요?
  • CORS(Cross-Origin Resource Sharing)는 출처가 다른 web application의 자원에 접근할 수 있는 권한을 부여하도록 Browser에 알려주는 체제입니다.
  • Browser는 보안 상의 이유로, 교차 출처 HTTP 요청을 제한합니다. cross-origin HTTP 요청을 하려면 Server의 동의가 필요합니다. 이런 허락을 구하고 거절하는 것을 HTTP-header를 이용하여 해결합니다.

  • Simple requset

      1. Server로 요청
      1. Server의 응답이 왔을 때 browser가 요청한 Origin과 응답한 header의 Access-Control-Request-Headers의 값을 비교하여 유효한 요청이면 응답
  • Pre flight

      1. Origin header에 현재 요청하는 origin
      1. Access-Control-Request-Method header에 요청하는 HTTP methos
      1. Access-Control-Request-Headers 요청시 사용할 heade를
      1. OPTIONS method로 server에 요청합니다. 이 때 내용물 없이 header만 전송ㅎㅂ니다
      1. Browser에서 응답한 header를 보고 유효한 요청이면 원래 보내려던 요청을 보내 resource를 응답받습니다.

  • cross-origin 이란
    • protocol이 다른 경우 (http, https, ftp)
    • domain이 다른 경우(domain.com, other-domain.com)
    • port 번호가 다른 경우(8080, 3000)

CORS는 Cross-Origin Resource Sharing의 약자로 교차 출처 리소스 공유라는 의미입니다. 추가 HTTP 헤더를 사용하여 한 출처에서 실행중인 웹 애플리케이션이 다른 출처의 선택 자원에 접근할 권한을 부여하도록 알려주는 체제입니다.

보안상의 이유로 브라우저는 기본적으로 교차 출처 http 요청을 제한합니다. 하지만 예외적으로 교차 출처를 허용해주는 것이 CORS입니다.

동작 순서는 다음과 같습니다.

요청 헤더에 존재하는 Origin이라는 필드에 요청을 보내는 출처를 함께 담아 보냅니다. 이후 서버는 해당 요청에 대한 응답을 할 때 응답헤더에 Access-Control-Allow-Origin값에 허용출처를 내려줍니다. 이 둘을 비교해서 해당 응답이 유효한 응답인지 아닌지를 결정합니다.