caching - Állítsa le a böngészőt, hogy HTTP-kéréseket küldjön azoknak a képeknek, amelyek gyorsítótárban maradnak - mod_expires

Translate

Miután sok cikket és néhány kérdést elolvasott itt,Végül sikerült az Apache aktiválásamod_expireshogy elmondja a böngészőnek, hogy 1 évig KELL tárolnia a képeket.

<filesMatch "\.(ico|gif|jpg|png)$">
  ExpiresActive On
  ExpiresDefault "access plus 1 year"
  Header append Cache-Control "public"
</filesMatch>

Szerencsére a szerver válaszai helyesnek tűnnek:

HTTP/1.1 200 OK 
Date: Fri, 06 Apr 2012 19:25:30 GMT 
Server: Apache 
Last-Modified: Tue, 26 Jul 2011 18:50:14 GMT 
Accept-Ranges: bytes 
Content-Length: 24884 
Cache-Control: max-age=31536000, public 
Expires: Sat, 06 Apr 2013 19:25:30 GMT
Connection: close
Content-Type: image/jpeg 

Nos, azt gondoltam, hogy ez leállítja a böngészőt a letöltéssel, és még 1 évig is érdeklődik a szerverről a képekről. De részben igaz: okha bezárja és újra megnyitja a böngészőt, a böngésző NEM tölti le a képeketmár a szerverről,de a böngésző még mindig kéri a szervert egy HTTP kéréssel minden képhez.

Hogyan kényszeríthetem a böngészőt, hogy állítsa le a HTTP-kérelmeket minden képhez? Még akkor is, ha ezeket a HTTP kéréseket nem követi egy kép letöltése, akkor is a szervernek küldött kérelmekszükségtelenül csökkenti a késleltetést és lassítja az oldal megjelenítését!

Már mondtam a böngészőnek, hogy 1 évig KÉPZENE kell a képeket a gyorsítótárban! Miért kérdezi a böngésző még mindig a szervert minden képért (még akkor is, ha nem tölti le a képet) ?!


A FireBug hálózati grafikonjait nézve (a FireBug menü> Net> Képek menüpontban) különböző gyorsítótárazási viselkedéseket láthatok (nyilvánvalóan azzal kezdtem, hogy a böngésző gyorsítótára teljesen üres volt, a böngészőben az "Összes előzmény törlése" használatával kényszerítettem a gyorsítótár törlését):

  • Az oldal első betöltésekor az összes kép letöltésre kerül(és ugyanaz történik, ha a böngésző újratöltési gombjára kattintva kényszerítem az oldal újratöltését).Ennek van értelme!

  • Amikor navigálok a webhelyen, és visszatérek ugyanarra az oldalraa képeket egyáltalán nem töltik le és aa böngésző nem is kérdezi a szervertbármelyik képhez.Ennek van értelme (és szeretném látni ezt a viselkedést akkor is, ha a böngésző zárva van)!

  • Amikor bezárom a böngészőt, és újra megnyitom ugyanazon az oldalon, az ostoba böngésző egyébként képenként egyszer HTTP kérést küld a szervernek: NEM alulindítja a képet, de mégis HTTP kérést küld, olyan, mintha a böngésző megkérdezné a szerver a képről(a szerver 200 OK-val válaszol).Ez irritál engem!

Az alábbi grafikonokat is csatolom, ha érdekel:

enter image description here

enter image description here

EDIT: most teszteltem a FireFox 11.0-val is, csak azért, hogy megbizonyosodjak arról, hogy a FireFox 3.6 nem túl régi. Ugyanez történik !!!Teszteltem a Google webhelyet és a Stackoverflow webhelyet is, mindkettő elküldi aCache-Control: max-age=...dea böngésző továbbra is HTTP-kérést küld a kiszolgálóhoz minden kép után, ha a böngészőt bezárják és újra megnyitják ugyanazon az oldalon, a szerver válasza után a böngésző NEM tölti le a képet (amint azt fentebb kifejtettem), de mégis megkapja azt a rohadt kérést, amely növeli az oldal megtekintéséhez szükséges időt.

EDIT2: és aLast-Modifiedfejléc a javaslat szerintitt, nem oldja meg a problémát, semmilyen különbséget nem jelent.

This question and all comments follow the "Attribution Required."

Minden válasz

Translate

Helytelen eszközt használt a kérések elemzéséhez.

Ajánlom az igazán hasznos Firefox kiegészítőtÉlő HTTP fejlécekígy láthatja, mi történik valójában a hálózaton.

És csak azért, hogy biztos legyek benne, ssh / kitöltheti a szervert, és ilyesmit tehet

tail -f /var/log/apache2/access.log
Forrás
Translate

A kívánt viselkedés a szándékolt (lásd:RFC7234további részletekért), meghatározott viselkedés:

Az összes modern böngésző HTTP-kéréseket küld a szerverre minden megjelenített oldalelemre, a gyorsítótár állapotától függetlenül. Ez a webszolgáltatások (különösen a reklámhálózatok) kérésére hozott tervezési döntés volt annak biztosítására, hogy a HTTP szerverek képesek legyenek nyilvántartást vezetni minden elem minden megjelenítéséről.

Ha a böngészők nem nyújtják be ezeket a kéréseket, akkor a szervert soha nem értesítik arról, hogy egy kép megjelent a felhasználó számára. A reklámhálózatok számára ez katasztrofális lenne. Korán a reklámhálózatok „feltörték” ezt az utat azzal, hogy ugyanazt a hirdetési képet véletlenszerűen generált nevek segítségével jelenítették meg (például: „coke_ad_1_98719283719283.gif”). Az internetszolgáltatók számára azonban ez a gyakorlat óriási növekedést okozott az adatátvitelben, mivel mindegyik felhasználó újratöltötte ezeket az azonos hirdetési képeket, megkerülve az internetszolgáltató által működtetett gyorsítótár / proxy szervereket.

Tehát fegyverszünetet értek el: A böngészők mindig HTTP-kéréseket küldtek, még a lejárt gyorsítótárazott elemek esetében is. A szerverek HTTP 304 állapotkódokkal válaszolnak ("nincs módosítva"). Ez lehetővé teszi a szerverek számára, hogy rögzítsék azt a tényt, hogy a kép megjelent az ügyfél számára. Ennek eredményeként a hirdetési hálózatokáltalábanabbahagyta a randomizált képnevek használatát a hálózati gyorsítótár-kiszolgálók megkerülésére.

Ez megadta a hirdetési hálózatoknak, amit akartak - minden megjelenített kép nyilvántartását -, és az internetszolgáltatóknak azt, amit akartak - gyorsítótár-képes képeket és statikus tartalmat.

Ezért nem sokat tehetünk azért, hogy megakadályozzuk a böngészőket abban, hogy HTTP-kéréseket küldjenek a gyorsítótárazott oldalelemekről.

De ha megnézi az elérhető más kliensoldali megoldásokat, amelyek a html5-tel együtt jártak, van lehetőség az erőforrások betöltésének megakadályozására

  1. Gyorsítótár-manifeszt(hiába vannak)
  2. IndexedDB(szép aszinkron funkciók, lehetővé teszi a blob tárolását)
  3. Helyi raktár(nem aszinkron)
Forrás
Translate

Van különbség az "újratöltés" és a "frissítés" között. A navigálás egy olyan oldalra, ahol vissza és előre gombok vannak, általában nem kezdeményez új HTTP kéréseket, de ha kifejezetten az oldal "frissítéséhez" nyomja meg az F5 billentyűt, akkor a böngésző kétszer ellenőrzi a gyorsítótárát. Ez böngészőfüggő, de úgy tűnik, hogy az FF és a Chrome (vagyis azok a böngészők, amelyek képesek könnyedén figyelni a hálózati forgalmat) normájának. töltse be újra az oldalt, de ne ellenőrizze még egyszer az oldalon található eszközöket.

Frissítés: a hátra és előre navigációs viselkedés tisztázása. "Vissza továbbító gyorsítótár" vagyBFCachea böngészőkben. Amikor a vissza / előre gombokkal navigál, a cél az, hogy pontosan azt mutassa meg, mint az oldal, amikor a saját idővonalán látta. A vissza és az előre használatkor nem érkeznek kiszolgálói kérelmek, még akkor sem, ha a kiszolgáló gyorsítótárának fejléce azt mondja, hogy egy adott elem lejárt.

Ha látja (200 OK BFCache) a fejlesztői hálózati panelen, akkor a kiszolgálót soha nem sikerült elérni - még ha kérdeznék is, hogy módosult-e azóta.

http://www.softwareishard.com/blog/firebug/firebug-tip-what-the-heck-is-bfcache/

Forrás
Translate

Ha kényszerítek egy frissítést az F5 vagy az F5 + Ctrl billentyűkombinációval, akkor egy kérést küldünk. Ha azonban bezárom a böngészőt, és újra megadom az URL-t, akkor NINCS szükség a kérelem elküldésére. Úgy teszteltem, hogy küldött-e egy kérést, vagy sem, amikor töréspontokat használtam a szerveren az indításkor, még akkor is, ha egy kérést még nem küldtek el, a Firebug továbbra is megjelenik, mint egy 7 ms várakozás, tehát vigyázzon erre.

Forrás
Translate

Amit itt leír, nem tükrözi a tapasztalataimat. Ha a tartalmat nem bolti irányelvvel szolgálják ki, vagy kifejezetten frissítesz, akkor igen, azt várnám, hogy visszatérjen az eredetiszerverre, különben a böngésző újraindításakor gyorsítótárba kell helyezni (feltéve, hogy megengedett és írhat) cache fájl).

Kicsit részletesebben megnézve a vízeséseit (ami bonyolult, mert kissé kicsi és elmosódott), úgy tűnik, hogy a böngésző pontosan azt csinálja, amit kellene - ezvanbejegyzések a képekhez - de ezek csak betöltődneka helyi gyorsítótárbólnem az origó szerverről - ellenőrizze a válaszban a "Dátum" fejlécet (mit gondol, miért vesz ez másodpercek helyett milliszekundumokat?). Ezért más színűek.

Forrás
Translate

Miután sok időt töltöttem ésszerű válasz keresésével, az alábbi linket találtam a leghasznosabbnak, és ez megválaszolja az itt feltett kérdést.

https://webmasters.stackexchange.com/questions/25342/headers-to-prevent-304-if-modified-since-head-requests

Forrás
Translate

Ha ez élet vagy halál kérdése (Ha így szeretné optimalizálni az oldal betöltését, vagy ha a lehető legjobban szeretné csökkenteni a szerver terhelését, bármi is legyen), akkor van egy megoldás.

Használjon HTML5-ethelyi raktárképek gyorsítótárazásához, miután először kérték őket.

  • [+]Megakadályozhatja, hogy a böngésző HTTP-kéréseket küldjön, amelyek 99% -ban 304-et adnak vissza (Nem módosítva), bármennyire is próbálkozik a felhasználó (F5, ctrl + F5, egyszerűen átlátogatja az oldalt stb.)

  • [-]Ehhez külön erőfeszítéseket kell tennie a javascript támogatásában.

  • [-]A képeket az base64 tárolja (a bináris adatokat nem tárolhatjuk), ezért minden egyes esetben dekódolják őket az ügyfél oldalán. Amiáltalábanelég gyors és nem nagy ügy, de még mindig némi extra processzor-használat az ügyfél oldalán, és szem előtt kell tartani.

  • [-]A helyi tárhely korlátozott. Célul szolgálhat, hogy tartományonként ~ 5 MB adatot használjon (Megjegyzés: a base64 ~ 30% -kal növeli a kép eredeti méretét).

  • [?]Támogattatöbbséga böngészők közül.http://caniuse.com/#search=localstorage

Példa

Teszt

Forrás
Translate

Amit a Chrome-ban lát, az nem a tényleges HTTP-kérelmek nyilvántartása, hanem az eszközkérelmek nyilvántartása. A Chrome ezt azért teszi, hogy megmutassa, hogy az oldal valóban kér egy elemet. Ez a nézet azonban valójában nem jelzi, hogy a kérelmet benyújtják-e. Ha egy elem gyorsítótárban van, akkor a Chrome soha nem fogja létrehozni az alapul szolgáló HTTP kérést.

Ezt meg is erősítheti úgy, hogy az idővonal lila szegmensei fölé viszi az egérmutatót. A gyorsítótárazott erőforrások a(from cache)az eszköztippben.

A tényleges HTTP-kérelmek megtekintéséhez alacsonyabb szintet kell keresnie. Egyes böngészőkben ezt egy pluginnel lehet megtenni (például Live HTTP fejlécek).

A valóságban azonban annak ellenőrzéséhez, hogy a kérések valóban nem történnek-e, ellenőriznie kell a kiszolgáló naplóit, vagy használnia kell egy olyan hibakereső proxyt, mint Charles vagy Fiddler. Ez HTTP szinten fog működni annak biztosítására, hogy a kérések valójában ne történjenek.

Forrás
Translate

Gyorsítótár ellenőrzése és a 304 válasz

Számos olyan helyzet van, amikor az Internet Explorernek ellenőriznie kell a gyorsítótárazott bejegyzés érvényességét:

  • A gyorsítótárazott bejegyzésnek nincs lejárati dátuma, és a tartalomhoz először csatlakozik egy böngésző munkamenet

  • A gyorsítótárazott bejegyzésnek lejárati dátuma van, de lejárt

  • A felhasználó az Frissítés gombra kattintva vagy az F5 megnyomásával kért egy oldalfrissítést

Ha a gyorsítótárazott bejegyzésnek van egy utolsó módosítási dátuma, akkor az IE elküldi azt egy GET-kérelem üzenet If-Modified-Since fejlécében:

GET /images/logo.gif HTTP/1.1
Accept: */*
Referer: http://www.google.com/
Accept-Encoding: gzip, deflate
If-Modified-Since: Thu, 23 Sep 2004 17:42:04 GMT
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)
Host: www.google.com

A szerver ellenőrzi az If-Modified-Since fejlécet, és ennek megfelelően válaszol. Ha a tartalom nem változott a megadott dátum / idő óta, akkor 304 állapotkóddal és egy válaszüzenettel válaszol, amely csak fejléceket tartalmaz:

HTTP/1.1 304 Not Modified
Content-Type: text/html
Server: GWS/2.1
Content-Length: 0
Date: Thu, 04 Oct 2004 12:00:00 GMT

A válasz gyorsan letölthető, mert nem tartalmaz tartalmat, és az IE arra készteti, hogy elolvassa a szükséges adatokat a gyorsítótárból. Valójában olyan, mint egy átirányítás a helyi böngésző gyorsítótárába.

Ha a kért objektum valóban megváltozott az If-Modified-Since fejlécben szereplő dátum / idő óta, a szerver 200 állapotkóddal válaszol, és megadja az erőforrás módosított verzióját.

Forrás
Translate

Erre a kérdésre jobb a válaszitta webmesterek veremcsere webhelyén.

További információ, amelyre a fenti link is hivatkozik, be van kapcsolvahttpwatch

A cikk szerint:

Számos olyan helyzet van, amikor az Internet Explorernek ellenőriznie kell a gyorsítótárazott bejegyzés érvényességét:

  • A gyorsítótárazott bejegyzésnek nincs lejárati dátuma, és a tartalomhoz először csatlakozik egy böngésző munkamenet
  • A gyorsítótárazott bejegyzésnek lejárati dátuma van, de lejárt
  • A felhasználó az Frissítés gombra kattintva vagy az F5 megnyomásával kért egy oldalfrissítést

    ide írja be a kódot

Forrás
Leave a Reply
You must be logged in to post a answer.
A szerzőről