요청 헤더 기반의 콘텐츠 캐싱 - 아마존 CloudFront

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

요청 헤더 기반의 콘텐츠 캐싱

CloudFront 오리진에 헤더를 CloudFront 전달할지, 최종 사용자 요청의 헤더 값을 기반으로 지정된 객체의 개별 버전을 캐시할지 여부를 선택할 수 있습니다. 이렇게 하면 사용자가 사용하는 디바이스, 최종 사용자의 위치, 최종 사용자가 사용하는 언어 및 다양한 조건에 따라 서로 다른 버전의 콘텐츠를 제공할 수 있습니다.

헤더 및 배포 – 개요

기본적으로 엣지 로케이션에 객체를 캐싱할 때는 헤더를 고려하지 CloudFront 않습니다. 오리진에서 두 개의 객체를 반환하고 요청 헤더의 값만 다를 경우 해당 객체의 한 버전만 CloudFront 캐싱합니다.

헤더를 오리진에 CloudFront 전달하도록 구성할 수 있습니다. 이렇게 하면 CloudFront 하나 이상의 요청 헤더에 있는 값을 기반으로 여러 버전의 객체를 캐시합니다. 특정 헤더의 값에 따라 객체를 캐싱하기 위한 CloudFront 를 구성하려면, 배포에 대한 캐시 동작 설정을 지정해야 합니다. 자세한 내용은 선택한 요청 헤더 기반의 캐시 단원을 참조하십시오.

예를 들어, logo.jpg에 대한 최종 사용자 요청에 Product 또는 Acme 값을 가진 사용자 지정 Apex 헤더가 포함되어 있다고 가정합니다. Product헤더 값을 기반으로 객체를 CloudFront 캐싱하도록 구성하면 는 요청을 오리진에 CloudFront 전달하고 Product 헤더 및 헤더 값을 포함합니다. logo.jpg CloudFront Product헤더 값이 있는 요청에 대해 logo.jpg 한 번, 값이 포함된 요청에 대해 한 번 캐싱합니다. Acme Apex

다음 중 하나를 수행하도록 배포의 각 캐시 동작을 구성할 수 있습니다.

  • 오리진에 전체 헤더를 전달합니다.

    참고

    레거시 캐시 설정의 경우 — 모든 헤더를 오리진에 CloudFront 전달하도록 구성한 경우 이 캐시 동작과 관련된 객체를 캐시하지 CloudFront 않습니다. 대신 각 요청을 오리진에 보냅니다.

  • 지정한 헤더 목록을 전달하십시오. CloudFront 지정된 모든 헤더의 값을 기반으로 객체를 캐싱합니다. CloudFront 또한 기본적으로 전달하는 헤더를 전달하지만 지정한 헤더만을 기반으로 객체를 캐싱합니다.

  • 기본 헤더만 전달합니다. 이 구성에서는 요청 CloudFront 헤더의 값을 기반으로 객체를 캐시하지 않습니다.

각 캐시 동작에 대해 전달할 수 있는 헤더 수에 대한 현재 할당량을 확인하거나 또는 더 높은 할당량을 요청하려면 헤더에 대한 할당량을 참조하십시오.

CloudFront 콘솔을 사용하여 배포를 업데이트하여 헤더를 오리진에 CloudFront 전달하는 방법에 대한 자세한 내용은 을 참조하십시오. 배포 업데이트 CloudFront API를 사용하여 기존 배포를 업데이트하는 방법에 대한 자세한 내용은 Amazon CloudFront API 참조의 배포 업데이트를 참조하십시오.

캐싱의 기반이 되는 헤더 선택

오리진에 전달할 수 있고 캐싱의 CloudFront 기반이 되는 헤더는 오리진이 Amazon S3 버킷인지 사용자 지정 오리진인지에 따라 달라집니다.

  • Amazon S3 — 여러 특정 헤더를 기반으로 객체를 전달하고 CloudFront 캐시하도록 구성할 수 있습니다 (다음 예외 목록 참조). 그러나 교차 원본 리소스 공유(CORS)를 구현해야 하거나 원본 대면 이벤트에서 Lambda@Edge를 사용하여 콘텐츠를 개인화하려는 경우가 아니면 Amazon S3 원본으로 헤더를 전달하지 않는 것이 좋습니다.

    • CORS를 구성하려면 CORS (크로스 오리진 리소스 공유) 가 활성화된 웹 사이트에 콘텐츠를 배포할 수 CloudFront 있는 헤더를 전달해야 합니다. 자세한 설명은 CORS 설정을 CloudFront 준수하도록 구성 섹션을 참조하세요.

    • Amazon S3 오리진에 전달하는 헤더를 사용하여 콘텐츠를 개인화하려면 Lambda @Edge 함수를 작성 및 추가한 다음 오리진 대상 이벤트에 의해 트리거되도록 CloudFront 배포와 연결합니다. 콘텐츠를 개인 설정하기 위해 헤더를 처리하는 방법에 대한 자세한 내용은 국가 또는 디바이스 유형 헤더별 콘텐츠 개인화 - 예제 단원을 참조하십시오.

      추가 헤더를 전달하면 캐시 적중률이 감소할 수 있으므로 콘텐츠를 개인화하는 데 사용하지 않는 헤더는 전달하지 않는 것이 좋습니다. 즉, 엣지 캐시에서 들어오는 요청을 전체 요청의 비율만큼 처리할 CloudFront 수는 없습니다.

  • 사용자 지정 오리진 — 다음을 제외한 모든 요청 헤더의 값을 기반으로 CloudFront 캐싱하도록 구성할 수 있습니다.

    • Connection

    • Cookie – 쿠키를 기반으로 전달 및 캐싱을 수행하려는 경우, 배포에 개별 설정을 사용합니다. 자세한 설명은 쿠키 기반의 콘텐츠 캐싱 섹션을 참조하세요.

    • Host (for Amazon S3 origins)

    • Proxy-Authorization

    • TE

    • Upgrade

    DateUser-Agent 헤더의 값을 기반으로 객체를 CloudFront 캐싱하도록 구성할 수 있지만 권장하지는 않습니다. 이러한 헤더는 여러 가지 값을 가질 수 있으며, 헤더의 값에 따른 캐싱으로 인해 CloudFront 에서 오리진에 전달되는 요청이 눈에 띄게 증가할 수 있습니다.

HTTP 요청 헤더의 전체 목록과 CloudFront 처리 방법은 을 참조하십시오. HTTP 요청 헤더 및 CloudFront 동작 (사용자 지정 및 Amazon S3 오리진)

CORS 설정을 CloudFront 준수하도록 구성

Amazon S3 버킷 또는 사용자 지정 오리진에서 CORS를 활성화한 경우에는 CORS 설정을 준수하도록 전달할 특정 헤더를 선택해야 합니다. 오리진(Amazon S3 또는 사용자 지정)과 OPTIONS 응답의 캐싱 여부에 따라 서로 다른 헤더를 전달해야 합니다.

Amazon S3

  • OPTIONS 응답을 캐싱하고 싶으면 다음을 수행하세요.

    • OPTIONS 응답에 대해 캐싱을 활성화하는 기본 캐시 동작 설정에 대한 옵션을 선택합니다.

    • Origin,Access-Control-Request-Headers, 및 헤더를 CloudFront 전달하도록 구성합니다. Access-Control-Request-Method

  • OPTIONS 응답을 캐싱하고 싶지 않으면 오리진에서 요청된 다른 모든 헤더와 함께 Origin 헤더를 전달하도록 CloudFront 를 구성합니다(예: Access-Control-Request-Headers, Access-Control-Request-Method, 또는 기타).

사용자 지정 오리진 – 오리진에서 요구하는 나머지 헤더와 함께 Origin 헤더를 전달합니다.

CORS를 기반으로 응답을 CloudFront 캐시하도록 구성하려면 캐시 정책을 사용하여 헤더를 CloudFront 전달하도록 구성해야 합니다. 자세한 설명은 정책 작업 섹션을 참조하세요.

CORS 및 Amazon S3에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서교차 원본 리소스 공유(CORS) 사용을 참조하세요.

디바이스 유형을 기반으로 캐싱하도록 구성

사용자가 콘텐츠를 보는 데 사용하는 기기에 따라 다른 버전의 객체를 CloudFront 캐시하려면 해당 헤더를 사용자 지정 오리진에 CloudFront 전달하도록 구성하세요.

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

User-Agent헤더 값을 기반으로 요청을 오리진에 true 전달하거나 오리진에 false 전달하기 전에 이러한 헤더의 값을 CloudFront 설정합니다. 디바이스가 둘 이상의 범주에 해당하는 경우 둘 이상의 값이 true일 수 있습니다. 예를 들어 일부 태블릿 기기의 경우 CloudFront-Is-Mobile-ViewerCloudFront-Is-Tablet-Viewer 를 모두 설정할 CloudFront 수 있습니다. true

최종 사용자 언어를 기반으로 캐싱하도록 구성

요청에 지정된 언어를 기반으로 다양한 버전의 객체를 CloudFront 캐시하려면 Accept-Language 헤더를 오리진에 CloudFront 전달하도록 구성하십시오.

최종 사용자 위치를 기반으로 캐싱하도록 구성

요청을 보낸 국가에 따라 다른 버전의 객체를 CloudFront 캐싱하려면 CloudFront-Viewer-Country 헤더를 오리진에 CloudFront 전달하도록 구성하십시오. CloudFront 요청을 보낸 IP 주소를 두 글자로 된 국가 코드로 자동 변환합니다. 코드 및 국가 이름별로 정렬할 수 있는 국가 코드 easy-to-use 목록은 위키백과 항목 ISO 3166-1 alpha-2를 참조하십시오.

요청의 프로토콜을 기반으로 캐싱하도록 구성

요청 프로토콜 (HTTP 또는 HTTPS) 에 따라 다양한 버전의 객체를 CloudFront 캐시하려면 헤더를 오리진에 전달하도록 CloudFront 구성하십시오. CloudFront-Forwarded-Proto

압축 파일에 대한 캐싱 구성

원본이 Brotli 압축을 지원하는 경우 Accept-Encoding 헤더를 기반으로 캐시할 수 있습니다. 오리진이 이 헤더를 기반으로 하여 다른 콘텐츠를 제공하는 경우에만 Accept-Encoding을 기반으로 캐싱하도록 구성합니다.

헤더를 기반으로 한 캐싱이 성능에 미치는 영향

하나 이상의 헤더를 기반으로 CloudFront 캐싱하도록 구성하고 헤더에 가능한 값이 두 개 이상 있는 경우, 동일한 객체에 대해 오리진 서버로 더 많은 요청을 CloudFront 전달합니다. 이는 성능을 저하시키고 오리진 서버에 걸리는 부하를 가중시킵니다. 오리진 서버가 지정된 헤더의 값과 상관없이 동일한 객체를 반환하는 경우 해당 헤더를 기반으로 CloudFront 캐싱하도록 구성하지 않는 것이 좋습니다.

둘 이상의 헤더를 CloudFront 전달하도록 구성한 경우 값이 동일하기만 하면 최종 사용자 요청의 헤더 순서는 캐싱에 영향을 주지 않습니다. 예를 들어, 한 요청에는 헤더 A:1, B:2가 포함되어 있고 다른 요청에는 B:2, A:1이 포함된 경우 객체의 복사본 하나만 캐시합니다. CloudFront

헤더 및 헤더 값의 대소문자가 캐싱에 미치는 영향

헤더 값을 기반으로 CloudFront 캐시할 때는 헤더 이름의 대소문자를 고려하지 않고 헤더 값의 대소문자를 고려합니다.

  • 뷰어 요청에 Product:Acmeproduct:Acme 가 모두 포함된 경우 객체를 한 번만 CloudFront 캐시합니다. 이들은 헤더 이름의 대소문자만 다른 경우로, 캐싱에는 영향을 미치지 않습니다.

  • 뷰어 요청에 Product:AcmeProduct:acme 가 모두 포함된 경우 값이 일부 요청에는 있고 다른 요청에는 값이 있기 Acme 때문에 객체를 두 번 CloudFront 캐시합니다. acme

뷰어로 CloudFront 반환되는 헤더

헤더를 전달하고 CloudFront 캐시하도록 구성해도 뷰어에 CloudFront 반환되는 헤더에는 영향을 주지 않습니다. CloudFront 오리진에서 가져온 헤더를 모두 반환합니다. 단, 몇 가지 예외가 있습니다. 자세한 내용은 관련 주제를 참조하십시오.