CloudFront Functions event type: viewer response
This function adds a Cache-Control header that is sent to the browser in the response from CloudFront. If your origin does not send a Cache-Control header, and you are relying on CloudFront's cache behaviors to control CloudFront caching, CloudFront will not send a Cache-Control header to the browser for browser caching. This function adds a Cache-Control header for the browser so that content can be cached locally in the browser. This reduces CloudFront costs, while giving users of your site better performance.
If your origin sends a Cache-Control header in responses to CloudFront, this header is passed to the browser. In this case, this function is not required.
Important: Set the max-age directive to an appropriate value for your specific needs.
Testing the function
To validate that the function is working as expected, you can use the provided test-event.json test object. To test, you can use the test-function CLI command that will look something like this:
$ aws cloudfront test-function --if-match EXXXXXXXXXXXX --name add-cache-control-headers --event-object fileb://add-cache-control-header/test-event.json
If the function has been set up correctly, you should see a result similar to the following with the cache-control header being added in the FunctionOutput JSON object:
{
"TestResult": {
"FunctionSummary": {
"Name": "cache-control-headers",
"Status": "UNPUBLISHED",
"FunctionConfig": {
"Comment": "",
"Runtime": "cloudfront-js-1.0"
},
"FunctionMetadata": {
"FunctionARN": "arn:aws:cloudfront::1234567890:function/add-cache-control-headers",
"Stage": "DEVELOPMENT",
"CreatedTime": "2021-04-08T22:46:57.566000+00:00",
"LastModifiedTime": "2021-04-09T17:50:11.730000+00:00"
}
},
"ComputeUtilization": "20",
"FunctionExecutionLogs": [],
"FunctionErrorMessage": "",
"FunctionOutput": "{\"response\":{\"headers\":{\"server\":{\"value\":\"CustomOriginServer\"},\"content-length\":{\"value\":\"9593\"},\"content-type\":{\"value\":\"text/html; charset=UTF-8\"},\"cache-control\":{\"value\":\"public, max-age=63072000;\"}},\"statusDescription\":\"OK\",\"cookies\":{\"loggedIn\":{\"attributes\":\"Secure; Path=/; Domain=example.com; Expires=Wed, 05 Jan 2024 07:28:00 GMT\",\"value\":\"true\"},\"id\":{\"attributes\":\"Expires=Wed, 05 Jan 2024 07:28:00 GMT\",\"value\":\"a3fWa\"}},\"statusCode\":200}}"