Я використовую Amazon S3 для обслуговування статичних активів для свого веб-сайту. Я хочу, щоб браузери кешували ці ресурси якомога довше. Які заголовки метаданих слід включити до своїх ресурсів
Cache-Control: max-age=???
Я використовую Amazon S3 для обслуговування статичних активів для свого веб-сайту. Я хочу, щоб браузери кешували ці ресурси якомога довше. Які заголовки метаданих слід включити до своїх ресурсів
Cache-Control: max-age=???
Відповіді:
Зазвичай один рік рекомендується як стандартне максимальне значення. Див. RFC 2616 :
Щоб позначити відповідь як "ніколи не закінчується", початковий сервер надсилає дату закінчення приблизно через рік з моменту надсилання відповіді. Сервери HTTP / 1.1 НЕ ПОВИННІ надсилати Термін дії закінчується більше одного року в майбутньому.
Хоча це стосується і старішого expires
стандарту, має сенс застосовувати його cache-control
також за відсутності явних вказівок щодо стандартів. Це стільки, скільки вам взагалі знадобиться, і вибір будь-якого довільно більшого значення може зламати деякі користувацькі агенти. Так:
Cache-Control: max-age=31536000
Подумайте про те, щоб не зберігати його «як можна довше», а замість цього розраховуватись як можна довше. Наприклад, навряд чи вам потрібно буде кешувати його довше, ніж, скажімо, 10 років ... я прав?
RFC обговорює максимальний вік тут: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3
Ерік Лоуренс каже, що до IE9 Internet Explorer вважав застарілим будь-який ресурс кеш-контролем: значення max-age понад 2147483648 (2 ^ 31) секунд, приблизно 68 років ( http://blogs.msdn.com/b /ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx ).
Інші користувацькі агенти, звичайно, будуть відрізнятися, тому ... спробуйте вибрати номер, який навряд чи (а швидше за все!) Спричинить переповнення. Максимальний вік більше 31536000 (один рік) мало сенсу, і неофіційно це вважається розумним максимальним значенням.
Люди, які створили рекомендацію щодо кешування максимум на 1 рік, не продумали її належним чином.
Перш за все, якщо відвідувачеві подають застарілий кешований файл, то чому б це забезпечило будь-яку перевагу, якщо він раптово завантажить нову версію через 1 рік? Якщо файл має 1-річний TTL, з функціональної точки зору, це, очевидно, означає, що файл взагалі не призначений для зміни.
То навіщо потрібно більше 1 року?
1) Чому ні? Це не має жодної мети для сервера, щоб сказати відвідувачам браузера "привіт, цьому файлу 1 рік, можливо, варто перевірити, чи оновлений".
2) послуги CDN. Більшість мереж доставки вмісту використовують заголовок кешу, щоб вирішити, як довго ефективно обслуговувати файл із граничного сервера. Якщо у вас є 1-річний кеш-файл для файлів, він в якийсь момент почне повторно запитувати незмінені файли з вихідного сервера, а кеш-пам’ять потрібно буде повністю заповнити, що спричинить повільніші навантаження для клієнта та зайве дзвінки до походження.
Який сенс мати максимум 1 рік? Які браузери подавляться сумою, встановленою вище 31536000?