쿠키를 기반으로 콘텐츠 캐싱 - Amazon CloudFront

쿠키를 기반으로 콘텐츠 캐싱

CloudFront에서는 요청 및 응답을 처리할 때나 엣지 로케이션의 객체를 캐싱할 때 쿠키를 기본적으로 고려하지 않습니다. Cookie 헤더의 내용을 제외하고 동일한 두 개의 요청을 CloudFront가 수신하면 기본적으로 CloudFront는 요청을 동일하게 처리하고 두 요청에 대해 동일한 객체를 반환합니다.

최종 사용자 요청의 쿠키 일부 또는 전체를 오리진으로 전달하고, 전달되는 쿠키 값에 따라 별도의 객체 버전을 캐싱하도록 CloudFront를 구성할 수 있습니다. 이렇게 하면 CloudFront에서 최종 사용자 요청에서 전달하도록 구성된 일부 또는 전체 쿠키를 사용하여 캐시의 객체를 고유하게 식별합니다. (RTMP 배포의 경우 쿠키를 처리하도록 CloudFront를 구성할 수 없으며 CloudFront는 엣지 캐시의 쿠키를 캐싱하지 않습니다.)

예를 들어, locations.html에 대한 요청에 uk 또는 fr 값을 가진 country 쿠키가 포함되어 있다고 가정합니다. country 쿠키 값을 기반으로 객체를 캐싱하도록 CloudFront를 구성할 경우, CloudFront에서는 locations.html에 대한 요청을 오리진에 전달하고 country 쿠키 및 쿠키 값을 포함합니다. 오리진에서는 locations.html을 반환하고 CloudFront에서는 country 쿠키의 값이 uk인 요청에 대해 한 번, 값이 fr인 요청에 대해 한 번, 객체를 캐싱합니다.

중요

Amazon S3 및 일부 HTTP 서버에서는 쿠키를 처리하지 않습니다. 쿠키를 처리하지 않거나 쿠키에 따라 다른 응답을 제공하지 않는 오리진에 쿠키를 전달하도록 CloudFront를 구성하지 마십시오. 그렇지 않으면 CloudFront가 동일한 객체에 대해 더 많은 요청을 오리진에 전달할 수 있으므로 성능이 저하되고 오리진의 로드가 증가합니다. 앞의 예제를 예로 들면, 오리진이 country 쿠키를 처리하지 않거나 country 쿠키의 값에 관계없이 항상 동일한 버전의 locations.html을 CloudFront로 반환하는 경우 해당 쿠키를 전달하도록 CloudFront를 구성하지 마십시오.

반대로 사용자 지정 오리진이 특정 쿠키에 의존하거나 쿠키에 따라 다른 응답을 보내는 경우 해당 쿠키를 오리진에 전달하도록 CloudFront를 구성해야 합니다. 그렇지 않을 경우 CloudFront는 오리진에 요청을 전달하기 전에 쿠키를 제거합니다.

쿠키 전달을 구성하려면 배포의 캐시 동작을 업데이트합니다. 캐시 동작에 대한 자세한 내용은 캐시 동작 설정(특히 쿠키 전달화이트리스트 쿠키 단원)을 참조하십시오.

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

  • 오리진에 모든 쿠키 전달 – CloudFront가 오리진에 요청을 전달할 때 최종 사용자가 보내는 모든 쿠키를 포함시킵니다. 오리진에서 응답을 반환할 때 CloudFront는 최종 사용자 요청의 쿠키 이름 및 쿠키 값을 사용하여 응답을 캐싱합니다. 오리진 응답에 Set-Cookie 헤더가 포함되어 있는 경우 CloudFront는 요청된 객체와 함께 헤더를 최종 사용자에게 반환합니다. 또한 CloudFront는 오리진에서 반환된 객체와 함께 Set-Cookie 헤더를 캐싱하고 모든 캐시 적중 시 최종 사용자에게 해당 Set-Cookie 헤더를 보냅니다.

  • 지정한 화이트리스트의 쿠키 전달 – CloudFront가 요청을 오리진에 전달하기 전에 최종 사용자가 보내는 쿠키 중 화이트리스트에 없는 쿠키를 모두 제거합니다. CloudFront는 최종 사용자 요청의 화이트리스트 쿠키 이름 및 값을 사용하여 응답을 캐싱합니다. 오리진 응답에 Set-Cookie 헤더가 포함되어 있는 경우 CloudFront는 요청된 객체와 함께 헤더를 최종 사용자에게 반환합니다. 또한 CloudFront는 오리진에서 반환된 객체와 함께 Set-Cookie 헤더를 캐싱하고 모든 캐시 적중 시 최종 사용자에게 해당 Set-Cookie 헤더를 보냅니다.

    쿠키 이름에 와일드카드를 지정하는 방법에 대한 자세한 내용은 화이트리스트 쿠키 단원을 참조하십시오.

    각 캐시 동작에 대해 화이트리스트로 지정할 수 있는 쿠키 이름 수에 대한 현재 할당량을 살펴보고 더 높은 할당량을 요청하려면, 화이트리스트에 등록된 쿼리 문자열에 대한 할당량(웹 배포만 해당) 단원을 참조하십시오.

  • 오리진에 쿠키를 전달하지 않음 – CloudFront에서 최종 사용자가 보낸 쿠키에 따라 객체를 캐싱하지 않습니다. 또한 CloudFront는 오리진에 요청을 전달하기 전에 쿠키를 제거하고 최종 사용자에게 응답을 반환하기 전에 응답에서 Set-Cookie 헤더를 제거합니다.

전달하려는 쿠키를 지정할 때는 다음 사항에 유의하십시오.

액세스 로그

요청과 쿠키를 로깅하도록 CloudFront를 구성하는 경우, 쿠키를 오리진에 전달하지 않도록 CloudFront를 구성한 경우나 화이트리스트의 특정 쿠키만 전달하도록 CloudFront를 구성한 경우라도 CloudFront에서는 전체 쿠키와 전체 쿠키 속성을 로깅합니다. CloudFront 로깅에 대한 자세한 내용은 액세스 로그 구성 및 사용 단원을 참조하십시오.

대소문자 구분

쿠키 이름과 값은 모두 대소문자를 구분합니다. 예를 들어, CloudFront가 모든 쿠키를 전달하도록 구성되어 있고 동일한 객체에 대한 두 개의 최종 사용자 요청에 대소문자를 제외하고 동일한 쿠키가 있는 경우 CloudFront는 객체를 두 번 캐싱합니다.

CloudFront에서 쿠키 정렬

CloudFront가 쿠키(전체 또는 화이트리스트)를 전달하도록 구성된 경우 CloudFront에서는 요청을 오리진에 전달하기 전에 쿠키 이름을 기준으로 쿠키를 일반 순서로 정렬합니다.

If-Modified-Since 및 If-None-Match

If-Modified-SinceIf-None-Match 조건부 요청은 CloudFront가 쿠키(전체 또는 화이트리스트)를 전달하도록 구성된 경우에 지원되지 않습니다.

표준 이름-값 페어 형식 필요

CloudFront에서는 값이 표준 이름-값 페어 형식을 따를 경우에만 쿠키 헤더를 전달합니다(예: "Cookie: cookie1=value1; cookie2=value2").

Set-Cookie 헤더 캐싱 비활성화

CloudFront는 쿠키를 오리진(전체 또는 화이트리스트)에 전달하도록 구성된 경우 오리진 응답에서 받은 Set-Cookie 헤더도 캐싱합니다. CloudFront는 원래 최종 사용자에 대한 응답에 이러한 Set-Cookie 헤더를 포함하고 CloudFront 캐시에서 제공되는 후속 응답에도 헤더를 포함합니다.

오리진에서 쿠키를 받지만 CloudFront가 오리진 응답에 Set-Cookie 헤더를 캐싱하지 않도록 하려면 Set-Cookie를 필드 이름으로 지정하는 no-cache 지시문이 있는 Cache-Control 헤더를 추가하도록 오리진을 구성합니다. 예: Cache-Control: no-cache="Set-Cookie". 자세한 내용은 Hypertext Transfer Protocol(HTTP/1.1): 캐싱 표준의 응답 캐시 제어 지시문을 참조하십시오.

쿠키 이름의 최대 길이

CloudFront가 오리진에 화이트리스트의 특정 쿠키를 전달하도록 구성한 경우 CloudFront에서 전달하도록 구성하는 모든 쿠키 이름의 총 바이트 수는 512에서 전달하는 쿠키 수를 뺀 값을 초과할 수 없습니다. 예를 들어 오리진에 10개의 쿠키를 전달하도록 CloudFront를 구성하는 경우, 이 10개의 쿠키 이름들을 합친 길이는 502바이트(512 – 10)를 초과할 수 없습니다.

오리진에 전체 쿠키를 전달하도록 CloudFront를 구성하는 경우, 쿠키 이름의 길이는 문제가 되지 않습니다.

CloudFront에서 오리진에 쿠키를 전달하도록 CloudFront 콘솔을 사용하여 웹 배포를 업데이트하는 방법에 대한 자세한 내용은 배포 업데이트 단원을 참조하십시오. CloudFront API를 사용한 배포 업데이트에 대한 자세한 내용은 Amazon CloudFront API ReferenceUpdateDistribution을 참조하십시오.