I am using Google App Engine Standard Environment for a node.js app.
I have a folder named public
for my static files. This contains files such as chunk-XIAWB55V.js
. I want these files to be heavily cached as the hashed filename will change if the contents change.
I added a static file handler to my app.yaml
to redirect requests starting /static
to my public
folder, and I confirmed it worked by checking the logs: requests to e.g. https://<redacted>.com/static/javascript/build/prod/chunk-Z4M5HAC7.js
are in the request log and are not hitting my app. The docs imply that a default cache of 10 minutes should be applied. However the browser devtools show that the actual headers are cache-control: no-cache, must-revalidate
and a request (which gets a 304
) is sent every time.
I have tried adding a expiration
param to my app.yaml
but it did not make a difference. I also tried setting the headers in app.yaml
but it did not make a difference. My current file looks like:
handlers:
- url: /static
static_dir: public
secure: always
expiration: "1d"
http_headers:
Cache-Control: public
Vary: Accept-Encoding
- url: /.*
secure: always
script: auto
I am still getting responses like:
I am using Identity Aware Proxy in front of App Engine and I know from e.g. this question that IAP and caching can mix badly but that seems to refer simply to possible IAP bypass. My static files are not sensitive and I am happy to accept that risk.