it-swarm-eu.dev

Na co by měla být nastavena moje záhlaví, kontrola mezipaměti a pragma HTTP záhlaví?

Mám web, na kterém aktualizuji obsah přibližně jednou měsíčně. Když zkontroluji pole záhlaví HTTP požadavku, dostanu následující výstup:

Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache

Moje otázka je, vzhledem k frekvenci, se kterou aktualizuji obsah, přemýšlím o ručním nastavení těchto polí, aby bylo možné mezipaměť webu. Používám hlavičku php (); příkaz k tomu.

Moje otázka tedy zní: na co by měla být nastavena moje záhlaví, kontrola mezipaměti a pragmatická pole HTTP požadavku? Měl bych kromě těchto polí také nastavovat další pole?

3
Wislow

Zdá se, že nastavení mezipaměti neodpovídá vašemu aktualizačnímu cyklu, takže si myslím, že jste na správné cestě. Přidání indikátorů, které koncovým uživatelům umožní ukládat do mezipaměti váš web a mezipaměti inline, zlepší dojem uživatelů a má potenciál snížit vaši šířku pásma a zatížení serveru.

To, co nastavíte výše, závisí na vaší toleranci zastaralého obsahu. Doporučil bych vůbec nenastavovat Cache-Control nebo Pragma a nastavit Expires na nějakou hodnotu, se kterou jste spokojeni (8 hodin? Jeden den?) Ofsetem z návštěvy uživatele. To je opravdu subjektivní a záleží na vašem obsahu.

Kromě nastavení výše uvedené hodnoty na rozumnou hodnotu byste také měli nastavit záhlaví jako Last-Modified nebo ETag, které umožňují podmíněné HEAD žádosti a zajišťují, že odpovíte 304 a žádný obsah, pokud stránka není. nemění se. Může to být založeno na databázovém poli date_modified (pokud existuje) nebo pro ETag byste ho mohli založit na hašování obsahu stránky.

Já osobně volím pár přístupů. Na statických stránkách nechám svůj výstupní skript PHP zapsat výstupní vyrovnávací paměť do adresáře mezipaměti a mít pravidlo přepsání Apache, které slouží ze statického umístění, pokud soubor již existuje. Poté v adresáři mezipaměti povolím ukládání do mezipaměti a DEFLATE zpracování statických stránek HTML pomocí více direktiv Apache. Kód pro zápis výstupní vyrovnávací paměti je specifický pro web, ale zde je mod-rewrite, který používám (v souboru .htaccess v podadresáři článků)

PřepsatEngine zapnuto
RewriteBase/články /
RewriteCond% {DOCUMENT_ROOT}/cache% {REQUEST_URI} -f
PřepsatRule.?/cache% {REQUEST_URI} [L]

To v podstatě říká, že pokud soubor existuje v mezipaměti, přesměrujte na něj a zastavte přepisování.

Poté v adresáři mezipaměti mám nastavení jako:

Platnost vyprší
ExpiresByType text/html „přístup plus 1 den“
AddOutputFilterByType DEFLATE text/html

A kombinuji to s kódem v mé aktualizační oblasti, která odstraní obsah /htdocs/cache/articles při úpravě šablony webu nebo obsahu článků.

Krása tohoto je, že Apache se stará o všechny podmíněné požadavky a kompresi a já nezasahuji PHP pro každou žádost.

Pro dynamický kód PHP používám následující knihovnu all-in-one, která zpracovává komprese, vypršení platnosti, 304 odpovědí If-Modified-Since GZip atd.:

http://alexandre.alapetite.fr/doc-alex/php-http-304/index.cs.html

Dalo by se dokonce kombinovat dva, modifikovat Alexandreho skript tak, aby se výstupní vyrovnávací paměť zapisovala do složky mezipaměti na prvním vykreslení statických stránek.

3
JasonBirch