교차 출처 리소스 공유(CORS)

동일 출처 정책은 서로 다른 출처의 리소스 간 상호작용을 방지하기 위해 클라이언트 측 웹 애플리케이션(웹브라우저 등)에서 적용되는 보안 정책입니다. 이 보안 조치는 악의적인 행동을 방지하는 데는 유용하지만 알려진 출처 간의 적법한 상호작용도 방지합니다. 예를 들어 example.appspot.com에 있는 App Engine에서 호스팅되는 페이지의 스크립트가 example.storage.googleapis.com에 있는 Cloud Storage 버킷에 저장된 리소스를 사용해야 할 수도 있습니다. 하지만 브라우저 관점에서 이 둘은 출처가 서로 다르기 때문에 브라우저는 example.appspot.com의 스크립트가 example.storage.googleapis.com의 리소스를 가져오는 것을 허용하지 않습니다.

교차 출처 리소스 공유(CORS)는 이 제한을 해결하기 위해 W3C(World Wide Web Consortium)에서 개발한 사양입니다. Cloud Storage는 버킷이 CORS를 지원하도록 구성하는 것을 허용함으로써 이 사양을 지원합니다. 위 예시에 이어 브라우저에서 example.storage.googleapis.com 버킷의 리소스를 example.appspot.com의 스크립트와 공유할 수 있도록 버킷을 구성할 수 있습니다.

CORS 작동 원리

단순 요청과 실행 전 요청이라는 두 가지 유형의 CORS 요청이 있습니다. 단순 요청은 바로 시작할 수 있습니다. 실행 전 요청은 기본 요청을 진행하기 전에 예비 "실행 전" 요청을 서버에 보내 권한을 얻어야 합니다. 다음 상황 중 하나에 해당하면 실행 전 요청입니다.

  • GET, HEAD, POST 외의 메소드를 사용합니다.
  • POST 메소드를 text/plain, application/x-www-form-urlencoded, multipart/form-data가 아닌 Content-Type과 함께 사용합니다.
  • 커스텀 헤더를 설정합니다.

브라우저가 Cloud Storage에 단순 요청을 보낼 때 다음과 같은 프로세스가 이루어집니다.

  1. 브라우저가 Origin 헤더를 요청에 추가합니다. Origin 헤더는 Origin:http://www.example.appspot.com과 같이 다른 도메인의 리소스를 공유하기 위해 리소스 출처를 포함하고 있습니다.

  2. Cloud Storage가 요청의 HTTP 메소드와 Origin 헤더의 값을 대상 버킷의 CORS 구성에 있는 메소드출처 정보와 비교하여 일치하는 항목이 있는지 확인합니다. 일치하는 항목이 있으면 Cloud Storage가 Access-Control-Allow-Origin 헤더를 응답에 포함합니다. Access-Control-Allow-Origin 헤더는 초기 요청에 있는 Origin 헤더의 값을 포함합니다.

  3. 브라우저가 응답을 받고 Access-Control-Allow-Origin 값이 원래 요청에 지정된 도메인과 일치하는지를 확인합니다. 일치하면 요청이 성공합니다. 일치하지 않거나 응답에 Access-Control-Allow-Origin 헤더가 없는 경우에는 요청이 실패합니다.

실행 전 요청은 다음 단계를 먼저 수행합니다. 성공하면 단순 요청과 동일한 프로세스를 따릅니다.

  1. 브라우저가 기본 요청의 Requested MethodRequested Headers를 포함하는 OPTIONS 요청을 보냅니다.

  2. 서버가 응답하고 대상 리소스에서 허용하는 HTTP 메소드 및 헤더의 값을 반환합니다. 실행 전 요청에 있는 메소드 또는 헤더 값 중 하나라도 대상 리소스에서 허용하는 메소드 및 헤더 집합에 들어 있지 않으면 요청이 실패하고 기본 요청이 전송되지 않습니다.

위 프로세스는 CORS를 매우 간단하게 설명한 것입니다. 자세한 설명은 교차 출처 리소스 공유 사양을 읽어보세요.

Cloud Storage CORS 지원

Cloud Storage는 버킷 수준에서만 CORS 구성을 설정할 수 있습니다. gsutil 명령줄 도구, XML API 또는 JSON API를 사용하여 버킷의 CORS 구성을 설정할 수 있습니다.

버킷에 CORS 구성을 설정하는 방법에 대한 자세한 내용은 교차 출처 리소스 공유(CORS) 구성을 참조하세요. CORS 구성 요소에 대한 자세한 내용은 버킷 CORS 설정을 참조하세요.

다음 XML API 요청 URL 중 하나를 사용하여 CORS 헤더를 포함하는 Cloud Storage에서 응답을 받을 수 있습니다.

storage.googleapis.com/[BUCKET_NAME]
[BUCKET_NAME].storage.googleapis.com

XML API 요청 URL에 대한 자세한 내용은 요청 엔드포인트를 참조하세요.

클라이언트 측 CORS 지원

대부분의 브라우저는 XMLHttpRequest 객체를 사용하여 교차 도메인 요청을 설정합니다. XMLHttpRequest는 올바른 헤더를 삽입하고 서버와의 CORS 상호작용을 처리하기 위한 모든 작업을 다룹니다. Cloud Storage 버킷에서 CORS 지원을 활용하기 위해 새로운 코드를 추가할 필요가 없습니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.