Cache content based on cookies
By default, CloudFront doesn’t consider cookies when processing requests and responses, or
when caching your objects in edge locations. If CloudFront receives two requests that are
identical except for what’s in the Cookie header, then, by default, CloudFront
treats the requests as identical and returns the same object for both requests.
You can configure CloudFront to forward to your origin some or all of the cookies in viewer requests, and to cache separate versions of your objects based on the cookie values that it forwards. When you do this, CloudFront uses some or all of the cookies in viewer requests—whichever ones it’s configured to forward—to uniquely identify an object in the cache.
For example, suppose that requests for locations.html contain a
country cookie that has a value of either uk or
fr. When you configure CloudFront to cache your objects based on the value of
the country cookie, CloudFront forwards requests for locations.html
to the origin and includes the country cookie and its value. Your origin
returns locations.html, and CloudFront caches the object once for requests in
which the value of the country cookie is uk and once for
requests in which the value is fr.
Important
Amazon S3 and some HTTP servers don’t process cookies. Don’t configure CloudFront to forward
cookies to an origin that doesn’t process cookies or doesn’t vary its response based
on cookies. That can cause CloudFront to forward more requests to the origin for the same
object, which slows performance and increases the load on the origin. If,
considering the previous example, your origin doesn’t process the
country cookie or always returns the same version of
locations.html to CloudFront regardless of the value of the
country cookie, don’t configure CloudFront to forward that cookie.
Conversely, if your custom origin depends on a particular cookie or sends different responses based on a cookie, make sure you configure CloudFront to forward that cookie to the origin. Otherwise, CloudFront removes the cookie before forwarding the request to your origin.
To configure cookie forwarding, you update your distribution’s cache behavior. For more information about cache behaviors, see Cache behavior settings, particularly the Forward cookies and Allowlist cookies sections.
You can configure each cache behavior to do one of the following:
-
Forward all cookies to your origin – CloudFront includes all cookies sent by the viewer when it forwards requests to the origin. When your origin returns a response, CloudFront caches the response using the cookie names and values in the viewer request. If the origin response includes
Set-Cookieheaders, CloudFront returns them to the viewer with the requested object. CloudFront also caches theSet-Cookieheaders with the object returned from the origin, and sends thoseSet-Cookieheaders to viewers on all cache hits. -
Forward a set of cookies that you specify – CloudFront removes any cookies that the viewer sends that aren’t on the allowlist before it forwards a request to the origin. CloudFront caches the response using the listed cookies names and values in the viewer request. If the origin response includes
Set-Cookieheaders, CloudFront returns them to the viewer with the requested object. CloudFront also caches theSet-Cookieheaders with the object returned from the origin, and sends thoseSet-Cookieheaders to viewers on all cache hits.For information about specifying wildcards in cookie names, see Allowlist cookies.
For the current quota on the number of cookie names that you can forward for each cache behavior, or to request a higher quota, see Quotas on query strings (legacy cache settings).
-
Don't forward cookies to your origin – CloudFront doesn’t cache your objects based on cookie sent by the viewer. In addition, CloudFront removes cookies before forwarding requests to your origin, and removes
Set-Cookieheaders from responses before returning responses to your viewers. Because this isn't an optimal way to use your origin resources, when you select this cache behavior, you should make sure that your origin doesn't include cookies in origin responses by default.
Note the following about specifying the cookies that you want to forward:
- Access logs
-
If you configure CloudFront to log requests and to log cookies, CloudFront logs all cookies and all cookie attributes, even if you configure CloudFront not to forward cookies to your origin or if you configure CloudFront to forward only specific cookies. For more information about CloudFront logging, see Standard logging (access logs).
- Case sensitivity
-
Cookie names and values are both case-sensitive. For example, if CloudFront is configured to forward all cookies, and two viewer requests for the same object have cookies that are identical except for case, CloudFront caches the object twice.
- CloudFront sorts cookies
-
If CloudFront is configured to forward cookies (all or a subset), CloudFront sorts the cookies in natural order by cookie name before forwarding the request to your origin.
Note
Cookie names that start with the
$character are unsupported. CloudFront will remove the cookie before forwarding the request to the origin. You can remove the$character or specify a different character at the start of the cookie name. If-Modified-SinceandIf-None-Match-
If-Modified-SinceandIf-None-Matchconditional requests are not supported when CloudFront is configured to forward cookies (all or a subset). - Standard name–value pair format is required
-
CloudFront forwards a cookie header only if the value conforms to the standard name–value pair format
, for example: "Cookie: cookie1=value1; cookie2=value2" - Disable caching of
Set-Cookieheaders -
If CloudFront is configured to forward cookies to the origin (whether all or specific cookies), it also caches the
Set-Cookieheaders received in the origin response. CloudFront includes theseSet-Cookieheaders in its response to the original viewer, and also includes them in subsequent responses that are served from the CloudFront cache.If you want to receive cookies at your origin but you don’t want CloudFront to cache the
Set-Cookieheaders in your origin’s responses, configure your origin to add aCache-Controlheader with ano-cachedirective that specifiesSet-Cookieas a field name. For example:Cache-Control: no-cache="Set-Cookie". For more information, see Response Cache-Control Directivesin the Hypertext Transfer Protocol (HTTP/1.1): Caching standard. - Maximum length of cookie names
-
If you configure CloudFront to forward specific cookies to your origin, the total number of bytes in all of the cookie names that you configure CloudFront to forward can’t exceed 512 minus the number of cookies that you’re forwarding. For example, if you configure CloudFront to forward 10 cookies to your origin, the combined length of the names of the 10 cookies can’t exceed 502 bytes (512 – 10).
If you configure CloudFront to forward all cookies to your origin, the length of cookie names doesn’t matter.
For information about using the CloudFront console to update a distribution so CloudFront forwards cookies to the origin, see Update a distribution. For information about using the CloudFront API to update a distribution, see UpdateDistribution in the Amazon CloudFront API Reference.