쿠키 기반의 콘텐츠 캐싱 - Amazon CloudFront

쿠키 기반의 콘텐츠 캐싱

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

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

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

중요

Amazon S3 및 일부 HTTP 서버에서는 쿠키를 처리하지 않습니다. 쿠키를 처리하지 않거나 쿠키에 따라 다른 응답을 제공하지 않는 오리진에 쿠키를 전달하도록 CloudFront를 구성하지 마십시오. 그렇지 않으면 CloudFront가 동일한 객체에 대해 더 많은 요청을 오리진에 전달할 수 있으므로 성능이 저하되고 오리진의 로드가 증가합니다. 앞의 예제를 예로 들면, 오리진이 country 쿠키를 처리하지 않거나 locations.html 쿠키의 값에 관계없이 항상 동일한 버전의 country을 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에서는 요청을 원본에 전달하기 전에 쿠키 이름을 기준으로 쿠키를 자연스러운 순서로 정렬합니다.

참고

$ 문자로 시작하는 쿠키 이름은 지원되지 않습니다. CloudFront는 오리진에 요청을 전달하기 전에 쿠키를 제거합니다. $ 문자를 제거하거나 쿠키 이름의 시작 부분에 다른 문자를 지정할 수 있습니다.

If-Modified-SinceIf-None-Match

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

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

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

Set-Cookie 헤더 캐싱 비활성화

CloudFront가 쿠키를 원본에 전달하도록 구성된 경우(전체 또는 특정 쿠키인지 여부에 관계없이) 원본 응답에서 수신된 Set-Cookie 헤더도 캐시합니다. CloudFront는 원래 최종 사용자의 응답에 이러한 Set-Cookie 헤더를 포함하며 CloudFront 캐시에서 제공되는 후속 응답에도 이러한 헤더를 포함합니다.

오리진에서 쿠키를 받지만 CloudFront가 오리진 응답에 Set-Cookie 헤더를 캐싱하지 않도록 하려면 Cache-Control를 필드 이름으로 지정하는 no-cache 지시문이 있는Set-Cookie 헤더를 추가하도록 오리진을 구성합니다. 예: 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 참조배포 업데이트를 참조하십시오.