Шта су кеширани подаци? Шта значи Цлеар Цацхе и шта то чини?

Прво, шта је кеш меморија?

Уопштено говорећи, кеш меморија (изговара се „готовина“) је врста спремишта. О спремишту можете размишљати као о складишту. У војсци би то било држање оружја, хране и других потрепштина потребних за наставак мисије.

У рачунарским наукама, ове „залихе“ називају се ресурсима, где су ресурси скрипте, код и садржај документа. Ово друго се понекад прецизније назива „средствима“ као што су текст, статички подаци, медији и хипервезе, али овде ћу користити само један израз ресурси .

Разлика између предмеморије и других врста спремишта

Примарна сврха кеш меморије је убрзати проналажење ресурса веб страница, смањујући време учитавања странице. Још један критични аспект кеш меморије је осигурати да садржи релативно свеже податке.

Овај чланак ће обрадити два најчешћа начина кеширања: кеширање прегледача и мреже за испоруку садржаја (ЦДН).

Поред кеша, у веб архитектури се појављују и друга спремишта; често су дизајнирани да садрже огромне количине података. Они, међутим, нису толико усредсређени на перформансе претраживања.

На пример, Амазон Глациер је спремиште података које је дизајнирано за јефтино складиштење података, али не и за брзо преузимање. СКЛ база података је, с друге стране, дизајнирана да буде флексибилна, ажурна и брза, али је ретко јефтина и обично није брза као кеш меморија.

Кеш прегледача: кеш меморија

Кеш меморија складишти ресурсе локално на рачунару на којем је покренут прегледач. Док је прегледач активан, преузети ресурси ће се чувати у физичкој меморији рачунара (РАМ), а можда и на чврстом диску.

Касније, када буду потребни потпуно исти ресурси приликом поновног посећивања веб странице, прегледач ће их повући из кеш меморије уместо са удаљеног сервера. Пошто се кеш меморише локално, у брзој меморији, ти ресурси се преузимају брже и страница се брже учитава.

Брзина проналажења ресурса је од суштинске важности, али исто тако и потреба да ресурси буду свежи. Застарели ресурс је онај који је застарео и можда више неће бити важећи.

Део посла прегледача је да идентификује који су кеширани ресурси застарели и да преузме оне који јесу. Будући да веб страница обично има мождане ресурсе, у кешу ће обично бити комбинација застарелих и свежих верзија.

Како прегледач зна шта застарело у кеш меморији?

Одговор није једноставан, али постоје два главна приступа: уништавање предмеморије и поља ХТТП заглавља.

уништавање кеш меморије

Италијани

Пробијање кеша је техника на страни сервера која осигурава да прегледач дохваћа само нове ресурсе. То чини индиректно.

Иако уништавање кеш меморије може звучати драматично, оно заиста ништа не уништава и чак не додирује оно што је већ меморисано у прегледачу. Све што уништава кеш меморију је промена УРИ оригиналног ресурса на начин да претраживачу изгледа да је ресурс потпуно нов. Будући да изгледа ново, неће бити у кешу прегледача. Стара верзија кешираног ресурса и даље ће бити кеширана, али на крају ће увенути и умрети, а никада јој се више неће приступити.

Рецимо да имам веб страницу на www.foobar.com/about.htmlкојој се говори све о фообар.цом што бисте икада желели да знате. Једном када посетите ту страницу, прегледач је кешира њу и ресурсе повезане са њом.

Касније фообар.цом откупљује корпорација Кукбаз, а садржај странице о претрпеће значајне промене. Кеш меморија прегледача неће имати тај нови садржај, али можда и даље верује да је садржај који има тренутно и никада неће покушати да га преузме.

Шта ви, веб администратор Кукбаз, радите да бисте осигурали да се сав нови садржај истисне?

Будући да се прегледач ослања на УРИ да би пронашао ставке у кешу, ако се УРИ ресурса промени, чини се да га прегледач никада није видео пре него што крене по тај ресурс са сервера.

Стога, променом УРИ-ја ресурса из www.foobar.com/about.htmlу www.foobar.com/about2.html(или у www.quxbaz.com/about.html), прегледач неће пронаћи ниједан ресурс кеш меморије повезан са тим УРИ-јем и извршиће потпуно преузимање са сервера. Ресурс би могао бити у основи исти као оригинал под старим УРИ-јем, али прегледач то не зна.

Ипак, не морате да мењате име странице. Од УРИ такође укључује стринг упита по дефиницији, можете додати верзија параметар на УРИ: www.foobar.com/about.html?v=2hef9eb1.

У овом случају, параметар верзије в поставља нову, нову генерисану хеш вредност кад год се садржај промени или је покрене неки други процес, као што је поновно покретање сервера. Прегледач уочава да се низ упита променио и зато што низови упита могу утицати на оно што ће бити враћено, са сервера ће преузети ажурирани ресурс.

Ниједна од ових техника неће функционисати ако се старом УРИ-ју приступи директно из обележивача. Ако прегледачу није наложено да поново потврди УРИ на последњем кешираном захтеву (или је кеширани ресурс истекао), неће извршити потпуно преузимање да освежи своју кеш меморију. Ово нас доводи до следеће теме.

ХТТП поља заглавља

Сваки захтев за ресурсом садржи неке мета информације познате као заглавље. Супротно томе, сваки одговор такође садржи информације о заглављу.

У неким случајевима прегледач види вредности заглавља одговора и мења одговарајуће вредности у следећим заглављима захтева. Међу овим вредностима заглавља су оне које утичу на то како се кеширање ресурса врши у прегледачу.

ХЕАД захтеви и условни захтеви

Захтев ХЕАД је попут скраћеног ГЕТ или ПОСТ захтева. Уместо да захтева комплетан ресурс, ХЕАД захтев захтева само поља заглавља која би се иначе вратила на пуни захтев.

Заглавље ресурса обично ће бити много мање (у броју укупних бајтова) од података ресурса повезаних са њим („тело“ одговора). Информације о заглављу су довољно информативне да омогућавају прегледачу да одреди свежину ресурса у својој кеш меморији.

Захтеви ХЕАД се често користе за проверу ваљаности ресурса сервера (односно, да ли ресурс и даље постоји и ако постоји, да ли је ажуриран од прегледача којем је последњи пут приступио?). Прегледник ће користити оно што се налази у кеш меморији ако ХЕАД захтев указује да је ресурс ваљан, у супротном ће извршити пуни ГЕТ или ПОСТ захтев и освежити кеш меморију оним што се врати.

Уз условни захтев, прегледач шаље поља у заглављу која описују свежину свог кешираног ресурса. Овог пута сервер утврђује да ли је кеш меморија прегледача још увек свежа.

Ако јесте, сервер враћа одговор 304 са само информацијама о заглављу ресурса, а без тела ресурса (података). Ако се утврди да је кеш меморија прегледача застарела, тада ће сервер вратити пуних 200 ОК одговора.

Овај механизам је бржи од коришћења ХЕАД захтева, јер елиминише могућност издавања два захтева уместо једног.

Горе наведено поједностављује процес који може бити прилично компликован. Много је финог подешавања укључено у кеширање, али све се контролише преко поља заглавља, од којих је најважније управљање кешом.

Контрола кеша

Када одговара на захтев, сервер ће прегледачу послати поља заглавља указујући на то које понашање треба прилагодити приликом кеширања. Ако страницу учитам на //en.wikipedia.org/wiki/Uniform_Resource_Identifier, одговор садржи ово у свом запису заглавља:

cache-control: private, s-maxage=0, max-age=0, must-revalidate 

привате значи да само прегледач треба да кешира садржај документа.

с-макаге и мак-аге су постављени на 0 . Вредност с-макаге је за прокси сервере са кеш меморијама, док је мак-аге намењен прегледачу. Ефекат постављање мак-аге само је у томе што Из контекста извор истиче одмах, али ипак може да се користи (мада Стале) током страница поновних док је у истом сесији прегледача.

Застарели ресурс може бити поновна провера кроз ХЕАД захтев, који може бити праћен ГЕТ или ПОСТ захтевом, у зависности од одговора. Мора хтмл директива команде бровсер да продуже кеширану ресурс ако је устајао.

Будући да је мак-аге у овом случају постављен на 0 , меморирани ресурс се одмах заустави када се прими. Комбинација две директиве је еквивалентна једној директиви но-цацхе .

Две поставке осигуравају да прегледач увек поново потврди кеширани ресурс, без обзира да ли је и даље у истој сесији или не.

Директиве о контроли предмеморије су врло опсежне и понекад збуњујуће - саме су по себи тема. Комплетну документовану листу директива можете пронаћи овде.

Е-таг

Ово је знак који сервер шаље, а прегледач задржава до следећег захтева. Ово се користи само када прегледач зна да је животни век предмеморије ресурса истекао.

Е-ознаке су хеш вредности које генерише сервер и које често користе физичко име датотеке и датум последње измене на серверу као семе. Када се датотека ресурса ажурира, измењени датум се мења, а нова хеш вредност се генерише и шаље у заглављу одговора на захтев.

Остале ознаке заглавља које утичу на кеширање

Ознаке заглавља истичу и последње измењене су све само застареле, али их већина сервера и даље шаље ради компатибилности са старијим прегледачима. Пример:

expires: Thu, 01 Jan 1970 00:00:00 GMT last-modified: Sun, 01 Mar 2020 17:59:02 GMT 

Овде се истек поставља на нулти датум (у прошлости из оперативног система УНИКС). То указује да ресурс истјече одмах, баш као што то чини мак-аге = 0 . Последња измена саопштава прегледачу када је извршено најновије ажурирање ресурса, које затим може користити да одлучи да ли треба да га преузме уместо да користи вредност кеша.

Принудно освежавање кеш меморије из прегледача

Шта је тешко поновно напунити?

Тешко поновно учитавање присиљава на поновно дохватање свих ресурса на страници, било да се ради о садржају, скриптама, табелама стилова или медијима. Скоро све, зар не?

Па, неки ресурси можда нису изричито на страници. Уместо тога, могу се дохватити динамички, обично након што се све експлицитно учита.

Прегледач не зна унапред да ће се то догодити, а када се догоди, каснији захтеви (обично покренути скриптама) и даље ће користити кеширане копије тих ресурса ако су доступни.

Шта је јасна кеш меморија и тешко поновно учитавање?

Ова операција брише целокупну кеш меморију прегледача, што има исти ефекат као и тешко поновно учитавање, али додатно доводи и до дохваћања динамички учитаних ресурса - на крају крајева, у кеш меморији нема ништа, тако да нема избора!

Мреже за испоруку садржаја: гео-лоцирана кеш меморија

ЦДН је више од само кеш меморије, али кеширање је један од његових послова. ЦДН складишти податке на географски распоређеним локацијама, тако да се скраћују времена повратних путовања до и од географски локалног прегледача.

Захтеви прегледача се усмеравају на оближњи ЦДН, чиме се скраћују подаци о физичкој удаљености који морају да пређу. ЦДН-ови такође могу да обрађују велике количине саобраћаја и пружају сигурност од неких врста напада.

ЦДН своје ресурсе добија преко Интернет Екцханге Поинт-а (ИКСП), чворова који су део окоснице Интернета (са великим словима). Треба предузети кораке за подешавање усмеравања захтева за одлазак на ЦДН уместо на хост сервер. Следећи корак је осигурати да ЦДН има тренутни садржај ваше веб странице.

У стара времена, већина ЦДН-ова подржавала је пусх метод: веб локација би гурала нови садржај у ЦДН чвориште, који би се затим дистрибуирао географски распршеним чворовима.

Данас већина ЦДН-ова користи горе описане протоколе кеширања (или сличне) за 1) преузимање нових ресурса и 2) освежавање постојећих. Прегледник и даље има своју кеш меморију и ништа се од тога не мења. Све што ЦДН ради је бржи пренос тих нових ресурса.