내보내기(0) 인쇄
모두 확장

Azure 저장소 서비스에 대한 CORS(크로스-원본 자원 공유) 지원

업데이트 날짜: 2013년 11월

버전 2013-08-15부터 Windows Azure 저장소 서비스는 Blob, 테이블 및 큐 서비스에 대해 CORS(크로스-원본 자원 공유)를 지원합니다. CORS는 한 도메인 아래에서 실행되는 웹 응용 프로그램이 다른 도메인의 리소스에 액세스할 수 있도록 하는 HTTP 기능입니다. 웹 브라우저는 웹 페이지에서 다른 도메인의 API를 호출하는 것을 방지하는 동일 원본 정책이라는 보안 제한을 구현합니다. CORS는 한 도메인(원본 도메인)에서 다른 도메인의 API를 호출할 수 있도록 하는 안전한 방법을 제공합니다. CORS에 대한 자세한 내용은 CORS 사양을 참조하십시오.

Blob 서비스 속성 설정, 큐 서비스 속성 설정테이블 서비스 속성 설정을 호출하여 각 저장소 서비스에 대해 개별적으로 CORS 규칙을 설정할 수 있습니다. 서비스에 대한 CORS 규칙을 설정하면 다른 도메인에서 서비스에 대해 수행된 적절하게 인증된 요청이 지정한 규칙에 따라 허용되는지 여부를 확인하기 위해 평가됩니다.

note참고
CORS는 인증 메커니즘이 아닙니다. CORS가 사용될 때 저장소 리소스에 대해 수행된 모든 요청은 적절한 인증 서명을 포함하거나 공용 리소스를 대상으로 해야 합니다.

원본 도메인에서의 CORS 요청은 두 가지 개별 요청으로 구성됩니다.

  • 서비스에 의해 적용되는 CORS 제한 사항을 쿼리하는 실행 전 요청. 실행 전 요청은 요청 메서드가 GET, HEAD 또는 POST와 같은 간단한 메서드가 아닌 경우 필요합니다.

  • 원하는 리소스에 대해 수행된 실제 요청

실행 전 요청은 계정 소유자가 저장소 서비스에 대해 설정한 CORS 제한 사항을 쿼리합니다. 웹 브라우저(또는 다른 사용자 에이전트)는 요청 헤더, 메서드 및 원본 도메인이 포함된 OPTIONS 요청을 보냅니다. 저장소 서비스는 저장소 리소스에 대한 실제 요청에서 지정될 수 있는 원본 도메인, 요청 메서드 및 요청 헤더를 지정하는 미리 구성된 CORS 규칙 집합에 따라 원하는 작업을 평가합니다.

CORS가 서비스에 사용되고 실행 전 요청과 일치하는 CORS 규칙이 있는 경우 서비스는 상태 코드 200(정상)으로 응답하고 필요한 Access-Control 헤더를 응답에 포함합니다.

CORS가 서비스에 사용되지 않거나 실행 전 요청과 일치하는 CORS 규칙이 없는 경우 서비스는 상태 코드 403(사용할 수 없음)으로 응답합니다.

OPTIONS 요청에 필요한 CORS 헤더(Origin 및 Access-Control-Request-Method 헤더)가 포함되지 않은 경우 서비스는 상태 코드 400(잘못된 요청)으로 응답합니다.

실행 전 요청은 서비스(Blob, 큐 및 테이블)에 대해 평가되며 요청된 리소스에 대해 평가되지 않습니다. 요청이 성공하려면 계정 소유자가 계정 서비스 속성의 일부로 CORS를 사용하도록 설정한 상태여야 합니다.

실행 전 요청이 승인되고 응답이 반환되면 브라우저에서 저장소 리소스에 대한 실제 요청을 보냅니다. 실행 전 요청이 거부되면 브라우저에서 실제 요청을 즉시 거부합니다.

실제 요청은 저장소 서비스에 대한 일반 요청으로 처리됩니다. Origin 헤더가 있으면 요청이 CORS 요청임을 나타내며, 서비스는 일치하는 CORS 규칙을 확인합니다. 일치하는 규칙이 있으면 Access-Control 헤더가 응답에 추가되어 클라이언트에 전송되고, 일치하는 규칙이 없으면 CORS Access-Control 헤더가 반환되지 않습니다.

CORS 규칙은 서비스 수준에서 설정되므로 각 서비스(Blob, 큐 및 테이블)에 대해 개별적으로 CORS를 사용하거나 사용하지 않도록 설정해야 합니다. 기본적으로 CORS는 각 서비스에 대해 사용하지 않도록 설정되어 있습니다. CORS를 사용하도록 설정하려면 버전 2013-08-15 이상을 사용하여 적절한 서비스 속성을 설정하고 CORS 규칙을 서비스 속성에 추가해야 합니다. 서비스에 대해 CORS를 사용하거나 사용하지 않도록 설정하는 방법과 CORS 규칙을 설정하는 방법은 Blob 서비스 속성 설정, 테이블 서비스 속성 설정큐 서비스 속성 설정을 참조하십시오.

Set Service Properties 작업을 통해 지정된 단일 CORS 규칙의 예는 다음과 같습니다.

<Cors>    
      <CorsRule>
            <AllowedOrigins>http://www.contoso.com, http://www.fabrikam.com</AllowedOrigins>
            <AllowedMethods>PUT,GET</AllowedMethods>
            <AllowedHeaders>x-ms-meta-data*,x-ms-meta-target*,x-ms-meta-abc</AllowedHeaders>
            <ExposedHeaders>x-ms-meta-*</ExposedHeaders>
            <MaxAgeInSeconds>200</MaxAgeInSeconds>
    </CorsRule>
<Cors>

CORS 규칙에 포함된 각 요소는 아래에 설명되어 있습니다.

  • AllowedOrigins: CORS를 통해 저장소 서비스에 대한 요청을 수행할 수 있는 원본 도메인입니다. 원본 도메인은 요청이 시작되는 도메인입니다. 원본은 사용자 에이전트가 서비스에 보내는 원본과 대/소문자를 구분하여 정확히 일치해야 합니다. 또한 와일드카드 문자 '*'를 사용하여 모든 원본 도메인이 CORS를 통해 요청하도록 허용할 수도 있습니다. 위의 예에서 http://www.contoso.com 및 http://www.fabrikam.com 도메인은 CORS를 사용하여 서비스에 대해 요청을 수행할 수 있습니다.

  • AllowedMethods: 원본 도메인이 CORS 요청에 사용할 수 있는 메서드(HTTP 요청 동사)입니다. 위의 예에서 PUT 및 GET 요청만 허용됩니다.

  • AllowedHeaders: 원본 도메인이 CORS 요청에서 지정할 수 있는 요청 헤더입니다. 위의 예에서 x-ms-meta-data, x-ms-meta-targetx-ms-meta-abc로 시작되는 모든 메타데이터 헤더가 허용됩니다. 와일드카드 문자 '*'는 지정된 접두사로 시작되는 모든 헤더가 허용됨을 나타냅니다.

  • ExposedHeaders: CORS 요청에 대한 응답으로 전송되고 브라우저에 의해 요청 실행자에게 노출될 수 있는 응답 헤더입니다. 위의 예에서 브라우저는 x-ms-meta로 시작되는 헤더를 노출하도록 지시를 받습니다.

  • MaxAgeInSeconds: 브라우저에서 실행 전 OPTIONS 요청을 캐시해야 하는 최대 시간입니다.

Windows Azure 저장소 서비스에서는 AllowedHeadersExposedHeaders 요소에 대해 접두사 헤더를 지정할 수 있습니다. 헤더의 범주를 허용하려면 해당 범주에 공통 접두사를 지정할 수 있습니다. 예를 들어 x-ms-meta*를 접두사 헤더로 지정하면 x-ms-meta로 시작되는 모든 헤더와 일치하는 규칙이 설정됩니다.

다음과 같은 제한이 CORS 규칙에 적용됩니다.

  • 저장소 서비스(Blob, 테이블 및 큐)당 최대 5개의 CORS 규칙을 지정할 수 있습니다.

  • XML 태그를 제외하고 요청에 포함된 모든 CORS 규칙 설정의 최대 크기는 2KB를 초과할 수 없습니다.

  • 허용된 헤더, 노출된 헤더 또는 허용된 원본의 길이는 256자를 초과할 수 없습니다.

  • 허용된 헤더 및 노출된 헤더는 다음 중 하나일 수 있습니다.

    • 정확한 헤더 이름이 제공된 리터럴 헤더(예: x-ms-meta-processed). 요청에 최대 64개의 리터럴 헤더를 지정할 수 있습니다.

    • 헤더 접두사가 제공된 접두사 헤더(예: x-ms-meta-data*). 이 방식으로 접두사를 지정하면 지정된 접두사로 시작하는 헤더가 허용 또는 노출됩니다. 요청에 최대 2개의 접두사 헤더를 지정할 수 있습니다.

  • AllowedMethods 요소에 지정된 메서드(또는 HTTP 동사)는 Windows Azure 저장소 서비스 API에서 지원되는 메서드를 따라야 합니다. 지원되는 메서드는 DELETE, GET, HEAD, MERGE, POST, OPTIONS 및 PUT입니다.

저장소 서비스는 실행 전 요청이나 실제 요청을 받을 때 적절한 Set Service Properties 작업을 통해 서비스에 대해 설정한 CORS 규칙에 따라 해당 요청을 평가합니다. CORS 규칙은 Set Service Properties 작업의 요청 본문에서 설정된 순서대로 평가됩니다.

CORS 규칙은 다음과 같이 평가됩니다.

  1. 먼저, 요청의 원본 도메인이 AllowedOrigins 요소에 나열된 도메인에 대해 확인됩니다. 원본 도메인이 목록에 포함되어 있거나 와일드카드 문자 '*'로 모든 도메인이 허용되는 경우 규칙 평가가 계속됩니다. 원본 도메인이 포함되어 있지 않은 경우에는 요청이 실패합니다.

  2. 다음으로, 요청의 메서드(또는 HTTP 동사)가 AllowedMethods 요소에 나열된 메서드에 대해 확인됩니다. 메서드가 목록에 포함되어 있으면 규칙 평가가 계속되고, 그렇지 않으면 요청이 실패합니다.

  3. 요청이 원본 도메인 및 메서드의 규칙과 일치하는 경우 해당 규칙이 요청을 처리하기 위해 선택되고 규칙이 더 이상 평가되지 않습니다. 그러나 요청이 성공하려면 요청에서 지정된 모든 헤더가 AllowedHeaders 요소에 나열된 헤더에 대해 확인됩니다. 전송된 헤더가 허용되는 헤더와 일치하지 않으면 요청이 실패합니다.

규칙이 요청 본문에 있는 순서대로 처리되므로 원본에 대해 가장 제한적인 규칙이 먼저 평가되도록 목록에서 먼저 지정하는 것이 좋습니다. 모든 원본을 허용하는 규칙과 같이 덜 제한적인 규칙은 목록의 끝에 지정합니다.

다음 예에서는 저장소 서비스의 CORS 규칙을 설정하는 작업에 대한 요청 본문의 일부를 보여 줍니다. 요청 생성에 대한 자세한 내용은 Blob 서비스 속성 설정, 큐 서비스 속성 설정테이블 서비스 속성 설정을 참조하십시오.

<Cors>
    <CorsRule>
        <AllowedOrigins>http://www.contoso.com</AllowedOrigins>
        <AllowedMethods>PUT,HEAD</AllowedMethods>
        <MaxAgeInSeconds>5</MaxAgeInSeconds>
        <ExposedHeaders>x-ms-*</ExposedHeaders>
        <AllowedHeaders>x-ms-blob-content-type, x-ms-blob-content-disposition</AllowedHeaders>
    </CorsRule>
    <CorsRule>
        <AllowedOrigins>*</AllowedOrigins>
        <AllowedMethods>PUT,GET</AllowedMethods>
        <MaxAgeInSeconds>5</MaxAgeInSeconds>
        <ExposedHeaders>x-ms-*</ExposedHeaders>
        <AllowedHeaders>x-ms-blob-content-type, x-ms-blob-content-disposition</AllowedHeaders>
    </CorsRule>
    <CorsRule>
        <AllowedOrigins>http://www.contoso.com</AllowedOrigins>
        <AllowedMethods>GET</AllowedMethods>
        <MaxAgeInSeconds>5</MaxAgeInSeconds>
        <ExposedHeaders>x-ms-*</ExposedHeaders>
        <AllowedHeaders>x-ms-client-request-id</AllowedHeaders>
    </CorsRule>
</Cors>

다음과 같은 CORS 요청을 살펴보겠습니다.

 

Request

Response

Method

Origin

Request headers

Rule Match

Result

PUT

http://www.contoso.com

x-ms-blob-content-type

첫 번째 규칙

성공

GET

http://www.contoso.com

x-ms-blob-content-type

두 번째 규칙

성공

GET

http://www.contoso.com

x-ms-client-request-id

두 번째 규칙

실패

첫 번째 요청은 첫 번째 규칙과 일치합니다. 원본 도메인이 허용되는 원본과 일치하고, 메서드가 허용되는 메서드와 일치하고, 헤더가 허용되는 헤더와 일치하므로 성공합니다.

두 번째 요청은 메서드가 허용되는 메서드와 일치하지 않기 때문에 첫 번째 규칙과 일치하지 않습니다. 그러나 두 번째 규칙과 일치하므로 성공합니다.

세 번째 요청은 원본 도메인과 메서드의 두 번째 규칙과 일치하므로 규칙이 더 이상 평가되지 않습니다. 그러나 x-ms-client-request-id 헤더가 두 번째 규칙에서 허용되지 않으므로 세 번째 규칙의 의미를 따를 경우 요청이 성공할 수 있음에도 불구하고 요청은 실패합니다.

note참고
이 예에서는 더 제한적인 규칙 앞에 덜 제한적인 규칙을 보여주지만 일반적으로 가장 제한적인 규칙을 먼저 나열하는 것이 좋습니다.

Vary 헤더는 서버에서 요청을 처리하기 위해 선택한 조건에 대해 브라우저나 사용자 에이전트에 알려주는 요청 헤더 필드의 집합으로 구성된 표준 HTTP/1.1 헤더입니다. Vary 헤더는 프록시, 브라우저 및 CDN에서 캐싱에 주로 사용되며, 이 헤더를 통해 응답이 캐시되는 방법이 결정됩니다. 자세한 내용은 Vary 헤더에 대한 사양을 참조하십시오.

브라우저나 다른 사용자 에이전트에서 CORS 요청의 응답을 캐시할 때 원본 도메인이 허용되는 원본으로 캐시됩니다. 두 번째 도메인이 캐시가 활성화된 동안 저장소 리소스에 대해 동일한 요청을 실행하는 경우 사용자 에이전트는 캐시된 원본 도메인을 검색합니다. 두 번째 도메인이 캐시된 도메인과 일치하지 않으므로 캐시되지 않았다면 성공했을 요청이 실패합니다. 특정한 경우에 Windows Azure 저장소는 Vary 헤더를 Origin으로 설정하여 요청하는 도메인이 캐시된 원본과 다른 경우 후속 CORS 요청을 서비스에 보내도록 사용자 에이전트에 지시합니다.

Windows Azure 저장소는 다음과 같은 경우에 실제 GET/HEAD 요청에 대해 Vary 헤더를 Origin으로 설정합니다.

  • 요청 원본이 CORS 규칙에서 정의하는 허용된 원본과 정확히 일치하는 경우. 정확히 일치하기 위해 CORS 규칙에 와일드카드 ' *' 문자가 포함되지 않을 수 있습니다.

  • 요청 원본과 일치하는 규칙이 없지만 CORS가 저장소 서비스에 사용되는 경우

GET/HEAD 요청이 모든 원본을 허용하는 CORS 규칙과 일치하는 경우 응답은 모든 원본이 허용됨을 나타내고, 사용자 에이전트 캐시는 캐시가 활성화된 동안 모든 원본 도메인의 후속 요청을 허용합니다.

GET/HEAD 이외의 메서드를 사용하는 요청의 경우 이러한 메서드에 대한 응답이 사용자 에이전트에서 캐시되지 않으므로 저장소 서비스는 Vary 헤더를 설정하지 않습니다.

다음 표에서는 Windows Azure 저장소가 위에서 설명한 경우에 따라 GET/HEAD 요청에 응답하는 방법을 나타냅니다.

 

요청

계정 설정 및 규칙 평가의 결과

응답

원본 헤더가 요청에 있음

CORS 규칙이 이 서비스에 지정됨

모든 원본(*)을 허용하는 일치하는 규칙이 있음

정확한 원본 일치에 해당하는 일치하는 규칙이 있음

응답에 Origin으로 설정된 Vary 헤더가 포함됨

응답에 Access-Control-Allowed-Origin: "*"

응답에 Access-Control-Exposed-Headers가 포함됨

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

아니요

성공적인 실행 전 요청은 Blob 서비스 속성 설정, 큐 서비스 속성 설정 또는 테이블 서비스 속성 설정을 호출하여 해당 계정의 저장소 서비스에 대해 CORS를 사용하도록 설정한 경우 청구됩니다. 요금을 최소화하려면 사용자 에이전트가 요청을 캐시하도록 CORS 규칙에서 MaxAgeInSeconds 요소를 큰 값으로 설정하는 것이 좋습니다.

실패한 실행 전 요청은 청구되지 않습니다.

참고 항목

표시:
© 2014 Microsoft