Amazon CloudFront
개발자 안내서 (API 버전 2016-09-29)

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

웹 배포의 경우 CloudFront에서는 엣지 로케이션의 객체를 캐싱할 때 쿠키를 기본적으로 고려하지 않습니다. 오리진에서 두 개의 객체를 반환하고 이들 객체는 Set-Cookie 헤더의 값에만 차이가 있는 경우, CloudFront에서는 한 가지 버전의 객체만 캐싱합니다. (RTMP 배포의 경우 쿠키를 처리하도록 CloudFront를 구성할 수 없으며 CloudFront는 엣지 캐시의 쿠키를 캐싱하지 않습니다.)

중요

Amazon S3 및 일부 HTTP 서버에서는 쿠키를 처리하지 않습니다. 쿠키를 처리하지 않는 오리진에 쿠키를 전달하도록 CloudFront 캐시 동작을 구성하지 마십시오. 그렇지 않으면 캐싱 가능성에 부정적인 영향을 주며 그에 따라 성능에도 영향을 미칩니다. 캐시 동작에 대한 자세한 내용은 캐시 동작 설정 단원을 참조하십시오.

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

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

참고

오리진에 쿠키를 전달하도록 CloudFront를 구성한 경우, CloudFront에서는 쿠키 값에 따라 캐싱합니다. 이는 오리진에서 요청의 쿠키 값을 무시하는 경우와 앞선 예제에서 항상 locations.html의 동일한 버전을 CloudFront에 반환하는 경우라도 마찬가지입니다. 결과적으로 CloudFront에서는 동일한 객체에 대해 더 많은 요청을 오리진 서버에 전달하게 되며, 이는 성능을 저하시키고 오리진 서버에 걸리는 부하를 가중시킵니다. 오리진 서버의 응답이 지정된 쿠키의 값에 따라 달라지지 않는 경우, 오리진에 해당 쿠키를 전달하도록 CloudFront를 구성하지 않는 것이 좋습니다.

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

  • 오리진에 전체 쿠키 전달 – CloudFront에서 전체 쿠키를 포함한 최종 사용자 요청을 오리진에 전달합니다. 오리진에서 응답을 반환할 때 CloudFront에서는 응답과 함께 최종 사용자 요청의 쿠키 및 쿠키 값을 캐싱합니다. (오리진에서 최종 사용자 요청에 없던 쿠키를 반환하는 경우, CloudFront에서는 이를 캐싱하지 않습니다.) CloudFront에서는 최종 사용자에게 요청한 객체와 함께 최종 사용자 요청에는 없던 쿠키를 포함한 전체 쿠키 및 쿠키 값을 반환합니다.

  • 지정한 쿠키의 화이트리스트 전달 – CloudFront에서는 요청을 오리진에 전달하기 전에 화이트리스트에 없는 모든 쿠키를 제거합니다. CloudFront에서는 오리진에서 보낸 응답과 함께 지정된 쿠키 및 쿠키 값을 캐싱합니다. (오리진에서 화이트리스트 지정 쿠키와 화이트리스트에 없는 쿠키를 모두 반환하는 경우 CloudFront에서는 화이트리스트 지정 쿠키만 캐싱합니다.) CloudFront에서는 최종 사용자에게 지정된 쿠키 및 쿠키 값을 포함해 객체를 반환합니다. 오리진에서 온 응답에 화이트리스트에 없는 쿠키가 포함된 경우, CloudFront에서는 그러한 쿠키 역시 최종 사용자에게 반환합니다.

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

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

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

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

액세스 로그

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

대소문자 구분

쿠키 이름과 값은 모두 대소문자를 구분합니다. 예를 들어 동일한 객체에 대한 두 개의 쿠키가 대소문자를 제외하고는 동일한 경우, CloudFront에서는 이 객체를 두 번 캐싱합니다.

CloudFront에서 쿠키 정렬

CloudFront에서는 요청을 오리진에 전달하기 전에 쿠키 이름을 기준으로 쿠키를 일반 순서로 정렬합니다.

If-Modified-Since 및 If-None-Match

If-Modified-SinceIf-None-Match 조건적 요청은 지원되지 않습니다.

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

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

쿠키 값 기반 캐싱 기능 일시 중지

CloudFront에서 임시로 쿠키 및 쿠키 속성의 캐싱을 중지하려는 경우 다음 헤더를 CloudFront에 대한 응답에 추가하도록 오리진 서버를 구성합니다.

no-cache="Set-Cookie"

쿠키 이름의 총 길이

CloudFront에서 오리진에 전달하도록 구성하는 전체 쿠키 이름의 총 바이트 수는 다음을 초과할 수 없습니다.

512 – (the number of cookies that you're forwarding)

예를 들어 오리진에 10개의 쿠키를 전달하도록 CloudFront를 구성하는 경우, 이 10개의 쿠키 이름들을 합친 길이는 502바이트(512-10)를 초과할 수 없습니다. 오리진에 전체 쿠키를 전달하도록 CloudFront를 구성하는 경우, 쿠키 이름의 길이는 문제가 되지 않습니다.

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