Right now files uploaded via ActiveStorage with the GCS Service default to
cache-control:
private,max-age=0
Cloud CDN caches only responses that are marked public and specify an expiration time or maximum age. This information is conveyed in HTTP response headers. If responses for a URL aren't being cached, check which HTTP headers are being returned for that URL.
ActiveStorage's architecture involves a 302 redirect to the underlying asset. Without a CDN for the GCS scenario, the performance implications of a highly trafficked site to also have to redirect wouldn't be stellar. But perhaps this is only a GCS problem, since I know AWS will cache content regardless of the cache-control header.
My proposed solution for this is to allow a developer to configure headers in the config/storage.yml on a per service basis:
google:
service: GCS
project: someproject
keyfile: credentials.json
bucket: bucket-of-assets
object_options:
cache_control: public, max-age=31556926
Ultimately, I believe developers will occasionally need a way to set headers on the files uploaded via ActiveStorage by the non Disk services. I would love to hear better alternatives if there are any.