Неустоимата история на дигиталните "бисквитки
Защо браузърът ти пази „бисквитки" и какво всъщност означава това
Представи си следното: влизаш в една пекарна и виждаш рафт с бисквити. До теб стои разработчик, който се вторачва в тях и пита: „Тези могат ли да поддържат сесия?" Не, не се шегува. Просто се чуди дали десертът може да съхранява състояние между различни заявки.
Тази забавна връзка между сладкиши и софтуер не е случайност. Тя разкрива как интернет се научи да помни.
Когато уебът забрави всичко
Нещо, за което малко хора се замислят: всеки път, когато кликнеш върху линк или изпратиш формуляр, браузърът ти изпраща напълно нова заявка към сървъра. Онзи няма вградена памет — не помни какво правиш дори три секунди по-рано. Не знае, че си влязъл в профила си, сложи нещо в количката или си избрал език.
Това не е дефект. HTTP е проектиран да бъде без състояние. Всяка заявка трябва да носи цялата нужна информация. За сървъра ти си напълно непознат всеки път.
За обикновени сайтове с текст и картинки това си работеше чудесно. Но съвременният уеб искаше повече: пазаруване, лични профили, запазени влизания. И тогава липсата на памет се превърна в истински проблем.
Състоянието: това, което на сайта му липсваше
Състояние (state) означава информация от предишни действия, която променя какво ще се случи по-нататък. Сложи ли клавиатура в количката — състоянието се промени. Когато стигнеш до плащане, сървърът трябва да прочете това състояние и да включи клавиатурата в сметката.
Състоянието може да се съхранява навсякъде — в паметта, бази данни, дори в браузъра. Важното е как да свържем отделните заявки в една логическа последователност.
Сесиите: мостът между заявките
Сесията е логически контейнер, който обединява отделни HTTP заявки в една непрекъсната линия. Нека една сесия продължи от влизане в профила до излизане — или пък да бъде анонимно пазаруване без регистрация.
Важното тук: HTTP не създава сесии сам. Твоето приложение решава кога започват, какво съдържат и кога свършват. Един потребител може да има пет активни сесии в различни табове — и това е напълно нормално.
Идентификаторът: отговори на въпроса „Чия е тази сесия?"
Тук нещата стават интересни. Сървърът обработва милиони активни сесии едновременно. Когато пристигне нова заявка, той трябва да отговори: „На кого принадлежи тази сесия?"
И тук идва идентификаторът на сесията — уникален маркер, който я отличава от всички останали. Не трябва да съдържа смислена информация или да е свързан с реална самоличност. Може да бъде произволен низ като 7f41c0a9 или session_88293847. Важното е сървърът да може да го използва, за да изтегли правилните данни.
Идентификаторът не е самите данни — той е ключът за тях. Сървърът казва: „Дай ми сесията с име 7f41c0a9" и ето я твоята количка отново.
Бисквитките: куриерът на идентификатора
Остава последната главоблъсканица: как този идентификатор да пътува с всяка заявка?
Сървърът не може да разчита на себе си — една заявка може да отиде при напълно различна негова копие. Затова идентификаторът трябва да се пази в браузъра и да се връща автоматично.
И точно това правят бисквитките (cookies). Сървърът изпраща малко данни — обикновено чифт име-стойност — до браузъра, който ги съхранява и ги връща с всяка следваща заявка. Така се роди механизмът, чрез който уебът помни потребителите.
Защо точно „бисквитка"?
Тук етимологията става мъглява. Терминът вероятно идва от „magic cookie" — концепция от Unix света, където маркер или стойност се предава между програми. Дали програмист в Netscape е бил гладен, когато е кръстил функцията, или просто е ценял Unix хумор — това остава загадка.
Ясно е обаче, че избраха име, което гарантираше, че всеки начинаещ разработчик ще търси снимки на десерти вместо документация. Може би това е програмистки хумор. Или просто не са преценили колко хора ще търсят „рецепта за шоколадови бисквитки".
Така че когато следващия път видиш „приеми бисквитки" на даден сайт, знай — не просто се съгласяваш да те следят. Участваш в едно хитрио решение, което превърна безпаметния уеб в нещо, което всъщност те помни.
В NameOcean помагаме на стартъпи и разработчици да изградят присъствие в мрежата — от регистрация на домейни до хостинг. Защото понякога разбирането на бисквитките не е достатъчно — нужна ти е и инфраструктурата, която да ги направи работещи.