How to disable Last-Modified and ETag headers in a static website hosted on S3 + CloudFront?

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:

  • put a proxy between S3 and CloudFront (on e.g. EC2) with the sole job of stripping out these headers
    • но для меня это противоречит самой сути статического сайта; Я хочу свести к минимуму движущиеся части
  • , используйте другой CDN, который позволяет вам удалять заголовки (например, можно сделать это с конфигурацией Fastly VCL)
    • but I really like CloudFront's zero minimum monthly spend, it makes it very cheap for a low-traffic site.

Is there anything else I could try?

0
задан 22 July 2016 в 13:58
1 ответ

... когда вы взяли на себя обязательство, что URL-адрес всегда будет обслуживать одно и то же тело содержимого. В этом случае часто лучше заставить браузер переходить прямо к своему локальному кэшу при повторных посещениях.

Браузер (или другой кеш) не будет посещать источник, пока не убедится, что срок действия контента истек. В вашем случае вместо этого вы захотите отправить соответствующие заголовки Cache-Control или Expires , чтобы указать максимально возможное время кеширования. Это единственный способ обеспечить стабильность URL-адреса. Удаление ETag и Last-Modified увеличит количество отправляемых данных, а не уменьшит их. Это связано с тем, что без этих заголовков браузер и источник будут вынуждены обновить весь контент,вместо того, чтобы просто выполнить легкую повторную валидацию .

В случае использования CDN вы можете вместо этого искать тот, который позволит вам переопределить Cache-Control и Expires заголовков, которые доставляются конечному пользователю, чтобы указать, что они должны кэшировать контент на неопределенный срок, даже если CDN необходимо повторно проверить его. Так что в ваших интересах, сможет ли CDN повторно проверить контент на основе заголовков ETag и Last-Modified , независимо от того, что вы объявляете конечному клиенту.

1
ответ дан 4 December 2019 в 16:33

Теги

Похожие вопросы