Background: there are good reasons to want to disable Last-Modified
and ETag
headers for some website assets: to prevent browsers sending conditional requests (either using If-Modified-Since
or If-None-Match
, respectively). This is good because conditional requests are just a waste of a round trip for assets that have a version number or digest in the URL – i.e. when you've made a commitment that the URL will always serve the same content body forever. In this case it's often better to force a browser to go straight to its local cache on repeat visits.
My question: I want to host a static website with S3 and CloudFront. It will be fairly low-traffic, and I want it to be fast. But there's no obvious way to prevent these headers coming through to the client – you can't disable them on S3, nor configure CloudFront to strip them out.
Options I've considered:
Is there anything else I could try?
... когда вы взяли на себя обязательство, что URL-адрес всегда будет обслуживать одно и то же тело содержимого. В этом случае часто лучше заставить браузер переходить прямо к своему локальному кэшу при повторных посещениях.
Браузер (или другой кеш) не будет посещать источник, пока не убедится, что срок действия контента истек. В вашем случае вместо этого вы захотите отправить соответствующие заголовки Cache-Control
или Expires
, чтобы указать максимально возможное время кеширования. Это единственный способ обеспечить стабильность URL-адреса. Удаление ETag
и Last-Modified
увеличит количество отправляемых данных, а не уменьшит их. Это связано с тем, что без этих заголовков браузер и источник будут вынуждены обновить весь контент,вместо того, чтобы просто выполнить легкую повторную валидацию .
В случае использования CDN вы можете вместо этого искать тот, который позволит вам переопределить Cache-Control
и Expires
заголовков, которые доставляются конечному пользователю, чтобы указать, что они должны кэшировать контент на неопределенный срок, даже если CDN необходимо повторно проверить его. Так что в ваших интересах, сможет ли CDN повторно проверить контент на основе заголовков ETag
и Last-Modified
, независимо от того, что вы объявляете конечному клиенту.