Какво представляват кешираните данни? Какво означава Clear Cache и какво прави?

Първо, какво е кеш паметта?

Най-общо кешът (произнася се „пари“) е вид хранилище. Можете да мислите за хранилището като хранилище за съхранение. Във военната сфера това би било съхраняването на оръжия, храна и други провизии, необходими за изпълнение на мисия.

В компютърните науки тези "доставки" се наричат ​​ресурси, където ресурсите са скриптове, код и съдържание на документи. Последното понякога се нарича по-конкретно „активи“ като текст, статични данни, носители и хипервръзки, но тук ще използвам само един термин ресурси .

Разграничението между кеш и други видове хранилища

Основната цел на кеша е да ускори извличането на ресурси на уеб страници, намалявайки времето за зареждане на страницата. Друг критичен аспект на кеша е да се гарантира, че той съдържа относително свежи данни.

Тази статия ще обхване два преобладаващи метода на кеширане: кеширане на браузъра и мрежи за доставка на съдържание (CDN).

Освен кешовете, в уеб архитектурите влизат в сила и други хранилища; често те са предназначени да съхраняват огромни масиви от данни. Те обаче не са толкова фокусирани върху ефективността на извличането.

Например, Amazon Glacier е хранилище за данни, предназначено да съхранява евтино данните, но не и да ги извлича бързо. SQL базата данни, от друга страна, е проектирана да бъде гъвкава, актуална и бърза, но рядко е евтина и обикновено не е толкова бърза, колкото кеш паметта.

Кешът на браузъра: кеш памет

Кеш паметта съхранява ресурси локално на компютъра, където работи браузърът. Докато браузърът е активен, извлечените ресурси ще се съхраняват във физическата памет (RAM) на компютъра, а вероятно и на твърдия диск.

По-късно, когато са необходими абсолютно същите ресурси при повторно посещение на уеб страница, браузърът ще изтегли тези от кеша вместо от отдалечения сървър. Тъй като кешът се съхранява локално, в бърза памет, тези ресурси се извличат по-бързо и страницата се зарежда по-бързо.

Скоростта на извличане на ресурси е от съществено значение, но също така е необходимостта ресурсите да бъдат свежи. Остарял ресурс е този, който е остарял и може вече да не е валиден.

Част от работата на браузъра е да идентифицира кои кеширани ресурси са остарели и да извлече тези, които са. Тъй като дадена уеб страница обикновено има май ресурси, в кеша обикновено ще има комбинация от остарели и свежи версии.

Как браузърът знае какво е остаряло в кеша?

Отговорът не е прост, но има два основни подхода: разбиване на кеш паметта и полета на HTTP заглавката.

разрушаване на кеша

Италианци

Разрушаването на кеша е техника от страна на сървъра, която гарантира, че браузърът извлича само нови ресурси. Прави това косвено.

Макар че разрушаването на кеша може да звучи драматично, то наистина не разрушава нищо и дори не докосва това, което вече е кеширано в браузъра. Всичко, което променя кеша, е да промени URI на оригиналния ресурс по начин, по който изглежда, че браузърът изглежда напълно нов. Тъй като изглежда нов, той няма да бъде в кеша на браузъра. Старата версия на кеширания ресурс пак ще бъде кеширана, но в крайна сметка ще изсъхне и ще умре, никога повече да не бъде достъпвана.

Да кажем, че имам уеб страница, на www.foobar.com/about.htmlкоято се казва всичко за foobar.com, което някога бихте искали да знаете. След като посетите тази страница, тя и свързаните с нея ресурси се кешират от браузъра.

По-късно foobar.com се изкупува от корпорацията Quxbaz и съдържанието на страницата за претърпява значителни промени. Кешът на браузъра няма да има това ново съдържание, но все пак може да вярва, че съдържанието, което има, е актуално и никога няма да се опита да го извлече.

Какво правите вие, администраторът на Quxbaz, за да се уверите, че цялото ново съдържание е изтласкано?

Тъй като браузърът разчита на URI за намиране на елементи в кеша, ако URI на даден ресурс се промени, все едно браузърът никога не го е виждал, преди да отиде да вземе този ресурс от сървъра.

По този начин, чрез промяна на URI на ресурса от www.foobar.com/about.htmlна www.foobar.com/about2.html(или на www.quxbaz.com/about.html), браузърът няма да намери никакъв кеш ресурс, свързан с този URI, и ще извърши пълно извличане от сървъра. Ресурсът може да е по същество същият като оригинала под стария URI, но браузърът не знае това.

Не е нужно обаче да променяте името на страницата. Тъй като URI включва също низ на заявка по дефиниция, можете да добавите параметър версия на URI: www.foobar.com/about.html?v=2hef9eb1.

В този случай параметърът на версията v задава нова, нова генерирана хеш стойност, когато съдържанието се промени или се задейства от някакъв друг процес, като рестартиране на сървъра. Браузърът вижда, че низът на заявката се е променил и тъй като низовете на заявката могат да повлияят на това, което ще бъде върнато, той ще извлече актуален ресурс от сървъра.

Нито една от тези техники няма да работи, ако старият URI е директно достъпен от отметка. Освен ако браузърът не е инструктиран да потвърди повторно URI при последната кеширана заявка (или кешираният ресурс е изтекъл), той няма да извърши пълно извличане, за да опресни кеша си. Това ни отвежда към следващата тема.

HTTP полета на заглавката

Всяка заявка за ресурс идва с някаква мета информация, известна като заглавка. И обратно, всеки отговор също има информация за заглавието, свързана с него.

В някои случаи браузърът вижда стойностите на заглавието на отговора и променя съответните стойности в следващите заглавки на заявките. Сред тези стойности на заглавките са тези, които влияят върху това как се извършва кеширането на ресурси в браузъра.

HEAD заявки и условни заявки

Искането HEAD е като пресечен GET или POST заявка. Вместо да поиска пълния ресурс, HEAD заявка иска само полетата на заглавката, които иначе биха били върнати при пълна заявка.

Заглавката на ресурс обикновено ще бъде много по-малка (като брой на общите байтове) от свързаните с нея данни за ресурса („тялото“ на отговора). Информацията за заглавието е достатъчно информативна, за да позволи на браузъра да определи свежестта на ресурса в кеша си.

HEAD заявките често се използват за проверка на валидността на сървърния ресурс (т.е. дали ресурсът все още съществува и ако е така, актуализиран ли е от последния достъп на браузъра до него?). Браузърът ще използва това, което е в кеша, ако HEAD заявката показва, че ресурсът е валиден, в противен случай ще изпълни пълна GET или POST заявка и ще опресни кеша си с това, което се връща.

С условна заявка браузърът изпраща полета в заглавката, описващи свежестта на кеширания си ресурс. Този път сървърът определя дали кешът на браузъра е все още свеж.

Ако е така, сървърът връща отговор 304 само с информация за заглавието на ресурса и без тяло на ресурса (данните). Ако кешът на браузъра е определен за остарял, тогава сървърът ще върне пълен отговор 200 OK.

Този механизъм е по-бърз от използването на HEAD заявки, тъй като елиминира възможността да се налага да се издават две заявки вместо една.

Горното опростява това, което може да бъде доста сложен процес. В кеширането има много фина настройка, но всичко това се контролира чрез полета на заглавките, най-важното от които е кеширането.

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

Когато отговаря на заявка, сървърът ще изпрати полета на заглавката до браузъра, указвайки какво поведение трябва да се адаптира при кеширане. Ако заредя страницата в //en.wikipedia.org/wiki/Uniform_Resource_Identifier, отговорът съдържа това в своя заглавен запис:

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

private означава, че само браузърът трябва да кешира съдържанието на документа.

s-maxage и max-age са зададени на 0 . Стойността s-maxage е за прокси сървъри с кеш, докато max-age е предназначена за браузъра. Ефектът от създаването макс възраст сам е, че кеширана ресурс изтича веднага, но тя все още може да се използва (макар и остаряла) по време на презареждане на страници, докато в една и съща сесия на браузъра.

Остарял ресурс може да бъде повторно потвърждаване чрез HEAD заявка, която може да бъде последвана от GET или POST заявка, в зависимост от отговора. В задължително опресняването директивата команди на браузъра да презавери кеширана ресурс, ако тя е остаряла.

Тъй като в този случай max-age е зададен на 0 , кешираният ресурс веднага е остарял, след като бъде получен. Комбинацията от двете директиви е еквивалентна на единичната директива no-cache .

Двете настройки гарантират, че браузърът винаги потвърждава отново кеширания ресурс, независимо дали все още е в същата сесия или не.

Директивите за контрол на кеша са много обширни и понякога объркващи - те са сами по себе си. Пълен документиран списък с директиви можете да намерите тук.

Е-таг

Това е знак, който сървърът изпраща и браузърът запазва до следващата заявка. Това се използва само когато браузърът знае, че животът на кеша на ресурса е изтекъл.

Електронните тагове са генерирани от сървъра хеш стойности, които често използват името на физическия файл на ресурса и последната модифицирана дата на сървъра като семе. Когато се актуализира ресурсен файл, променената дата се променя и се генерира нова хеш стойност, която се изпраща в заглавката на отговора към заявката.

Други заглавни маркери, засягащи кеширането

Заглавните маркери изтичат и последната модификация са почти остарели, но все още се изпращат от повечето сървъри за обратна съвместимост с по-стари браузъри. Пример:

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

Тук срокът на валидност е зададен на нулева дата (исторически от операционната система UNIX). Това показва, че ресурсът изтича веднага, точно както max-age = 0 . Последната модификация съобщава на браузъра кога е направена последната актуализация на ресурса, която след това може да използва, за да реши дали да го извлече, вместо да използва стойността на кеша.

Принуждаване на опресняване на кеша от браузъра

Какво е трудно презареждане?

Силното презареждане принуждава повторното извличане на всички ресурси на дадена страница, независимо дали са съдържание, скриптове, таблици със стилове или медии. Почти всичко, нали?

Е, някои ресурси може да не са изрично включени на дадена страница. Вместо това те могат да бъдат извличани динамично, обикновено след зареждане на всичко изрично.

Браузърът не знае предварително, че това ще се случи и когато го направи, по-късните заявки (инициирани обикновено от скриптове) все още ще използват кеширани копия на тези ресурси, ако са налични.

Какво е чист кеш и трудно презареждане?

Тази операция изчиства целия кеш на браузъра, което има същия ефект като твърдо презареждане, но допълнително води до извличане и на динамично заредени ресурси - в края на краищата в кеша няма нищо, така че няма избор!

Мрежи за доставка на съдържание: кеш с географско местоположение

CDN е нещо повече от кеш, но кеширането е една от неговите задачи. CDN съхранява данни в географски разпределени местоположения, така че времето за двупосочно пътуване до и от географски локален браузър е намалено.

Заявките на браузъра се насочват към близкия CDN, като по този начин се съкращават данните за реакция на физическо разстояние, които трябва да се изминат. CDN също са в състояние да обработват големи количества трафик и осигуряват сигурност срещу някои видове атаки.

CDN получава ресурсите си чрез Internet Exchange Point (IXP), възли, които са част от гръбнака на Интернет (с главни букви). Има стъпки, които трябва да предприемете, за да настроите маршрутизиране на заявки, за да отидете на CDN вместо на хост сървъра. Следващата стъпка е да се уверите, че CDN съдържа текущото съдържание на вашия уебсайт.

В старите дни повечето CDN поддържаха метода на push: уебсайтът щеше да изпраща ново съдържание към CDN хъб, който след това щеше да се разпространява в географски разпръснати възли.

В днешно време повечето CDN използват кешираните протоколи, описани по-горе (или подобни), за да 1) изтеглят нови ресурси и 2) да опресняват съществуващите. Браузърът все още има своя кеш и нищо от това не се променя. Всичко, което CDN прави, е да направи тези трансфери на нови ресурси по-бързи.