Megfelelő http cache-httplib2
Lesz feltétlenül kell érteni, hogy a HTTP-cache-t. Őszintén szólva, ez szükséges. Említettem már sokszor, hogy a választás a HTTP-módszer rendkívül fontos a tervezés webes szolgáltatások - különösen a választás a GET módszer lehetővé teszi, hogy előnyös a használata a HTTP-cache-t. Tehát: eljutni a GET metódus segítségével minden előnyét, hogy ezek alapján, meg kell érteni, hogyan HTTP-caching működik és hogyan lehet ez életbe hatékony, hogy növelje a teljesítményét a szolgáltatást.
Ebben a cikkben, nem fogom elmagyarázni, hogyan kell beállítani gyorsítótár webkiszolgáló használata, és nem írja le a különböző cache-t. Ha tényleg érdekel, azt ajánlom, hogy megismerjék a figyelemre méltó tankönyv a HTTP-caching Mark Nottingham.
A legelső dolog, amit meg kell érteni -, hogy milyen célokat követnek caching modell által használt HTTP. Az egyik ilyen célok - az, hogy a kliens és a szerver beállítása a feltételeket, amelyek a küldött dokumentum lehet venni a gyorsítótárból. Könnyen belátható, hogy ez önmagában hozza egy bizonyos cache modell bonyolultságát.
Az alapot a caching használt modell HTTP alkotják érvényesítő - részben a lekérdezés ügyfél által használt annak érdekében, hogy a tárolt dokumentum továbbra is érvényes (vagyis nem elavult). Segítségével érvényesítő lehetővé teszi a kliens vagy egy köztes szerver ellenőrizheti az aktuális állapotát a dokumentumot, anélkül, hogy át, hogy a szerver cache másolatot az egész. A szerver, ezek után elküldi a dokumentumot válasz csak akkor, ha az érvényesítő szerezték jelenlétét jelzi a kliens cache elavult (érvénytelen) példányt.
érvényesítő
Az egyik az érvényesítő, amelyek használják a HTTP - ez ETag. ETag egy hash ( „ujjlenyomatot”) bájt a dokumentumot, ha a dokumentum a változás még egyetlen bájt, a változás és ETag.
Mielőtt használni ezt érvényesítő, szükséges legalább egyszer egy dokumentumot kérés GET metódust. ha a szerver támogatja ezt a funkciót, a ETag fejléc válaszában tartalmazni fog egy hash-t a továbbított változata a dokumentum. Az ügyfél ebben az esetben ment cache a dokumentummal együtt annak ETag. és további kérelmek ugyanahhoz a dokumentumhoz az elmentett ETag mint az érvényesítő.
Tegyük fel például, megkérdeztem a dokumentum example.org szerver. és kaptam ezt a választ:
Aztán a következő alkalommal, amikor megkérdezem, ugyanahhoz a dokumentumhoz a GET metódus segítségével. Tudok használni egy érvényesítő. Megjegyzés: ETag mentett értékét továbbítja a fejléc Ha-None-Match.
Ha az idő a kérések között a dokumentum nem módosult, a kiszolgáló egy 304 nem módosult.
Ha a dokumentum megváltozott, a kiszolgáló visszatér a 200 kódot, és adja át az új változata a dokumentum a válasz, valamint a ETag értéke az új verzió.
Cache-Control
Érvényesítő segítségével ellenőrizhető, hogy a dokumentum megváltozott; kezeléséhez példányban a tárolt, használja header Cache-Control. A legfontosabb a cache vezérlő irányelvek - egy max-kor. azt jelzi, hogy a cache a dokumentum másolatát elavul a max-age másodperc. Ez az irányelv lehet használni a kérelmet, és a válasz -, hogy mind a kliens és a szerver eldönti, hogy meddig lesz érvényes okmányok általuk továbbított. Ha a szerver a cache válasz viszonylag új, akkor vissza közvetlenül a cache; egyébként történik hitelesítési eljárás a fent leírt.
Tekintsük ismét megkaptuk a választ a szerver. Ebben Cache-Control fejléc beállítja a max-age = 7200. azaz cache dokumentum másolata érvényét veszti, majd 2 órán át.
Amellett, hogy a max-kor. A Cache-Control fejléc tette sok más irányelvek. Ezek mindegyike egyaránt alkalmazhatók kérelmek vagy válaszok, vagy - mint a max-age - és kérések és válaszok.
Irányelv megengedett lekérdezések
Ugyanaz, mint a must-revalidate. de működik, csak a proxy szerver.
Tekintsük a cím példa a használatra gyorsítótár-Control:
Cache-Control: saját, max-age = 3600
Elfogadható az a kiszolgáló válaszát; Ez azt jelenti, hogy a válasz csak a cache zárva egy órát.
Cache-Control: nyilvános, must újraérvényesítés, max-age = 7200
Ez azt jelenti, hogy a válasz tárolható nyílt gyorstárazott két órán keresztül; lejárta után az érvényességi biztonsági másolatot kell újra ellenőrizni minden kérelem esetében.
Cache-Control: kell újraérvényesítés, max-kor = 0
Arra kényszeríti az ügyfél, hogy ellenőrizze az érvényességét a tárolt másolatok minden kérés esetén; max-kor = 0 azt jelzi, hogy a dokumentum elavulttá válik után azonnal megkapja az ügyfél. Ebben a papír, Mark Nottingham «Kihasználva a Web: Gyorsítás» A fenti példa egy furcsa eset, amelyben lehetőség van, hogy az ilyen cím.
Gyakorlatilag ugyanaz, mint az előző példában; Az egyetlen különbség az, hogy - a kliens használhat egy lekérdezés irányelv max-állott, és elavult, hogy a választ, míg a must-revalidate irányelv hatásának törléséhez max-állott. Ez a komplex rendszer szükséges, mert ahogy már korábban említettük, a kiszolgáló és az ügyfél egyszerre érinti a cache.
Mindezek a példák Cache-Control fejléc használatára tekintve alkalmazását egy válasz a szervertől. Most tekintsük példák, ahol a címet használja a lekérdezés.
Felhívja a”teljes» ( «end-to-end») A dokumentum frissítése: cache, hozzáfér az ügyfélnek kell újrakérelmezi a dokumentum a szerver, ahonnan kapunk.
Így az ügyfél kéri a dokumentum fejlécében, ami érvényes marad a 200 másodperc után a kérelmet.
Lehet, hogy kíváncsi, hogy a cache belegabalyodik összes ilyen helyzetben. Például mit csináljon, ha a szerver nem tud visszatérni a különböző dokumentumokat az azonos URI? Ilyen esetekben, amennyiben a HTTP fejléc Vary. Ez a fejléc nevét adja cache a kérés fejlécét, ha megváltozik, a szerver visszatér egy másik dokumentumot.
Tegyük fel, hogy a szerver tárgyal a kliens visszatérő dokumentum -, akkor különböző válaszokat az azonos URI esetleg eltérő fejlécet Content-Type. attól függően, hogy az elfogadott dokumentum típusát. Ezután a szerver hozzá válasz fejléce Vary: elfogadni. és a cache menteni az egyéni válaszok kéréseket különböző Accept fejléc.
Ebben a példában a kiszolgáló azt jelzi, hogy a válasz is elmenti a cache két órán keresztül, egyénileg kérelmek különböző fejlécek Accept-Encoding és User-Agent.
kapcsolat
Miután a szerver sikeresen érvényességének ellenőrzése a tárolt változatok, például útján érvényesítő cím Ha-None-Match. - visszatér a 304 nem módosult. További ebben az esetben nem történik semmi, nem igaz? Tulajdonképpen, nem egészen: a szerver küld egy választ a 304 Nem módosított fejléc értéke a dokumentumot, frissítse őket a cache. Ezen túlmenően, a szerver lehet a kapcsolat fejléc felsorolni a nevét, e címet, hogy nem kell frissíteni.
Alapértelmezés szerint néhány fejléceket nem tárolja a cache - az úgynevezett „címet vegyületek» ( «hop-by-hop»): Connection Keep-Alive, Proxy-Hitelesítés, Proxyengedélyezés, TE, pótkocsik, Transfer-Encoding és frissítése . Az értékek az összes egyéb jogcímen - „fejlécet a dokumentum» ( «end-to-end») - az alapértelmezett gyorsítótárban.
Ebben a példában a fejléc értéknappal. nem-cím szerinti vegyület és a összeköttetési fejrész. Ez lesz a cache.
Bárcsak ilyen egyszerű
Bár az összes caching írunk le, bizonyos fokú összetettség az érzékelés, legalábbis azok egy összefüggő logikai rendszer. Természetesen mindent bonyolítja a munka szükségességét a meglévő szerverek és kliensek a HTTP 1.0 protokollt. ; Működtesse időben - ez régebbi protokoll más fejléceket kezelésére használt caching Mindezen régebbi címeket támogatottak HTTP 1.1 visszafelé kompatibilitás.
Használt a HTTP 1.0 caching modell épül öregedési idő a dokumentumot. Last-Modified érvényesítő ellenőrzi az utolsó módosítás ideje a dokumentumot. Cache használja érvényességének ellenőrzése a dokumentum dátuma fejléceket. Lejár. Last-Modified és If-Modified-Since.
Most, hogy megértsék, hogy a caching HTTP, akkor valószínűleg kíváncsi, hogy vannak-e kedvenc nyelv kész könyvtárak Engedélyezett gyorsítótárral. Azt lehet mondani, ami Python: sajnos még nem. Nagyon sajnálom, hogy nem az egyik legjobb megvalósítások HTTP-ügyfelek nem írt kedvenc nyelvén. És meg kell, hogy helyes ez félreértés.
Örömmel mutatom be önöknek httplib2 könyvtár - egy teljes funkcionalitású HTTP-kliens Pythonban írt. A könyvtár fenntartja helyi cache beltéri és megérti a jelen cikkben ismertetett lépések műveletek rájuk. Ezen kívül számos olyan funkciót általában nem találhatók meg más HTTP-könyvtárak:
Másrészt lehetőséget meg lehet tanulni httplib2 projekt oldalán.