CORS를 알아봐요!

 ・ 2 min

photo by Almaz Nourzhanov on Unsplash

CORS#

CORS는 Corss-Origin Resource Sharing의 약자로, 서로 다른 출처의 리소스가 상호 작용하도록 허용하는 웹 보안 메커니즘이에요.
웹 브라우저가 다른 웹사이트의 리소스에 접근하도록 허용하는 방식이에요.

toss-cors-url
위 이미지는 토스의 CORS(교차 출처 리소스 공유)에서 가져왔어요.
이미지 정리가 아주 잘되어 있어서 한눈에 보기 참 좋아요!

CORS는 아래와 같은 목적으로 사용해요.

  • API 호출: 웹 애플리케이션이 다른 도메인의 API를 호출할 수 있도록 해요.
  • 이미지 및 기타 리소스 로딩: 웹사이트가 다른 도메인의 이미지, CSS 파일, JavaScript 파일 등을 로딩할 수 있도록 해요.
  • 실시간 데이터 공유: 웹 애플리케이션이 서로 다른 도메인에서 실시간 데이터를 공유할 수 있도록 해요.

Headers#

요청 헤더와 응답 헤더에 사용되는 CORS 값은 아래와 같아요.

Request headers#

  • Origin: 리소스를 요청하는 웹사이트의 도메인과 포트 번호를 나타내요.
  • Access-Control-Request-Method: 서버가 허용하는 HTTP 요청 메서드(GET, POST, PUT, DELETE 등)를 나타내요.
  • Access-Control-Request-Headers: 실제 요청에서 어떤 HTTP 헤더를 사용할지 서버에게 알려주기 d위해 사용해요.

Response headers#

  • Access-Control-Allow-Origin: 서버가 어떤 Origin의 리소스에 대한 접근을 허용하는지 나타내요.
  • Access-Control-Allow-Credentials: 서버가 자격 증명(예: 쿠키, 세션 ID)을 포함한 요청을 허용하는지 나타내요.
  • Access-Control-Expose-Headers: 응답 헤더 중 클라이언트에서 스크립트가 액세스할 수 있는 헤더를 지정해요.
  • Access-Control-Max-Age: 캐시된 CORS 응답의 최대 수명을 지정해요.
  • Access-Control-Allow-Credentials: credentials 플래그가 true일 때 요청에 대한 응답을 표시할 수 있는지를 나타내요.
  • Access-Control-Allow-Methods: 리소스에 접근할 때 허용되는 메서드를 지정해요.
  • Access-Control-Allow-Headers: 서버가 허용하는 HTTP 요청 헤더를 나타내요.

Preflight request#

CORS 관련 내용을 찾아보다 보면 계속 언급되는 단어여서 찾아봤어요. 미리 전송 요청이라고 번역할 수 있을 것 같아요.

preflight request는 OPTIONS 메서드를 통해 다른 도메인의 리소스로 HTTP 요청을 보내 실제 요청이 전송하기에 안전한지 확인해요.
cross-origin 요청은 유저 데이터에 영향을 줄 수 있기 때문에 이와같이 미리 전송(preflighted)해요.


When you see a man of worth, think of how you may emulate him. When you see one who is unworthy, examine yourself.

— Confucius


Other posts
cover_image
 ・ 12 min

프론트엔드 개발자에게 중요한 역량

cover_image
 ・ 8 min

세계 경제 예측

cover_image
 ・ 11 min

누가 리더인가