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.

A következő alkalommal