Vebda yandex.uz deb yozganingizda nima sodir bo'ladi?
Manzil qatoriga "yandex.uz" deb yozasiz va Enter bosasiz. Yarim soniya ham o'tmaydi — sahifa oldingizda turadi. O'tgan maqolada mana shu yarim soniyaning bir qismini ochib chiqqan edik: baytlar…
Manzil qatoriga “yandex.uz” deb yozasiz va Enter bosasiz. Yarim soniya ham o’tmaydi — sahifa oldingizda turadi.
O’tgan maqolada mana shu yarim soniyaning bir qismini ochib chiqqan edik: baytlar simlar orqali qanday oqishini, kompyuterning manzili nima ekanini, “yandex.uz” degan nomdan raqamli manzil qanday topilishini, ma’lumot mayda paketlarga bo’linib routerdan routerga qanday o’tishini va yo’lda paket yo’qolsa nima bo’lishini.
Lekin o’sha maqolada bitta narsa ataylab chetda qoldirilgan edi — saytning o’zi. Baytlar qayerdan qayerga borishini bildik. Ular nima deyishini esa hali bilmaymiz.
Yandexning kompyuteriga aynan qanday so’rov ketadi? U nima deb javob qaytaradi? Va o’sha javobdan brauzer qanday qilib rangli, chizilgan, bosiladigan sahifa yasaydi?
Shu maqola aynan shu haqda. Internet — yo’l edi. Veb esa o’sha yo’ldan yuradi.
Boshlashdan oldin savolning qisqa javobini beramiz: Enter bosgandan sahifa ko’ringuncha nima-nima sodir bo’ladi, besh qadamda. Keyin esa o’sha qadamlarning har birini birma-bir ochamiz:
- So’rov borgan kompyuterda nima turibdi? Sayt aslida nimadan iborat?
- Sahifa oldindan tayyor turadimi yoki siz so’ragan paytda yasaladimi?
- Bitta kompyuterda o’nlab dastur ishlaydi. Kelgan so’rovni qaysi biri oladi?
- Brauzer serverga aynan nima deb murojaat qiladi?
- Server nima deb javob beradi? 200 va 404 nimadan darak beradi?
- Nega bitta sahifa uchun o’nlab so’rov yuboriladi?
- Nega o’sha sayt ikkinchi marta tezroq ochiladi?
- Server meni qayerdan eslab qoladi? Nega har safar parolni so’ramaydi?
- Manzil oldidagi qulfcha nimani anglatadi? Bir xil Wi-Fi’ga ulangan begona odam mening parolimni ko’ra oladimi?
Oxirida esa boshdagi besh qadamni yana bir marta takrorlab o’tamiz — bu safar hech narsani tashlab ketmasdan.
O’tgan maqolani o’qimagan bo’lsangiz ham tushunarli bo’ladi. Ba’zi joylarda unga havola qoldiraman, xolos. Bu yerda ham dastur yozmaymiz: bir-ikki joyda brauzer bilan server o’rtasidagi yozishmani ko’rsataman, lekin uni o’qish uchun hech narsa bilish shart emas.
Qisqacha javob: Vebda yandex.uz deb yozganingizda nima sodir bo’ladi?
Enter bosdingiz. Shundan keyingi yarim soniyada quyidagilar sodir bo’ladi.
Birinchidan, manzil topiladi. “yandex.uz” — bu manzil emas, shunchaki nom. Odam eslab qolishi uchun qulay, lekin baytlarni jo’natish uchun raqamli IP manzil kerak. Shuning uchun brauzer avval DNS’dan so’raydi: “yandex.uz qayerda?” Javob qaytadi: 77.88.44.55 ga o’xshash manzil. O’tgan maqolada bu tizim haqida batafsil gaplashgan edik. Ko’pincha esa bu qadamning o’zi ham bo’lmaydi: manzil oldingi safardan eslab qolingan bo’lsa, tayyori ishlatiladi.
Ikkinchidan, kanal ochiladi. Manzil topilgani bilan hali hech narsa so’ralgani yo’q. Avval ikki tomon o’rtasida kanal ochilishi kerak: brauzer “tayyormisan?” deb xabar yuboradi, server “tayyorman” deb javob qaytaradi. Shundan keyingina kanal ochiq hisoblanadi va u orqali gaplashsa bo’ladi — buni ham o’tgan maqolada ko’rib chiqqan edik.
Kanal qanday ochilishi esa manzilning boshidagi so’zga bog’liq. “http://” bo’lsa kanal ochiq holda ochiladi: undan o’tgan hamma narsa — so’rov ham, javob ham — oddiy matn ko’rinishida ketadi. “https://” bo’lsa bitta qo’shimcha bosqich bor: ikki tomon avval shifrlangan kanal quradi va brauzer narigi tomon rostdan ham Yandex ekanini tekshirib oladi. Bugun deyarli hamma sayt shu ikkinchi yo’ldan yuradi.
Shu yerda uchta nomni aytib qo’yaylik, chunki bundan keyin ular tez-tez uchraydi. Manzilda turgan, so’rov kelishini kutib o’tirgan kompyuterni server deb ataymiz. So’rovni yuborayotgan tomonni — ya’ni sizning qurilmangizni va undagi brauzerni — klient deymiz. “http” va “https” degan so’zlar esa bejiz emas: bular protokollarning nomi, ya’ni klient bilan server oldindan kelishib olgan qoidalar to’plami.
Uchinchidan, so’rov yuboriladi. Kanal tayyor. Endi brauzer o’z gapini o’sha kanal orqali aytadi va gap qisqagina bo’ladi: “falon saytning bosh sahifasini menga ber”. Bu gap ham o’z-o’zidan yozilmaydi — qaysi so’z birinchi turishi, manzil qayerda ko’rsatilishi, gap qayerda tugashi, hammasi HTTP qoidalarida oldindan kelishib olingan. So’rov aynan qanday ko’rinishda yozilishini quyiroqda o’z ko’zingiz bilan ko’rasiz.
To’rtinchidan, javob keladi. Server so’rovni o’qiydi va javob qaytaradi. Javobning eng boshida qisqa xabar turadi: so’ralgan narsa topildimi, yo’qmi, yoki xatolik serverning o’zida bo’ldimi. Bu xabar raqam bilan beriladi va mashhur 200 ham, 404 ham — aynan shu raqamlar. Ular HTTP status kodlari deb ataladi va qaysi raqam nimadan darak berishini alohida bo’limda ko’rib chiqamiz. Raqamdan keyin esa so’ralgan sahifaning o’zi keladi.
Beshinchidan, brauzer sahifani yig’adi. Kelgan sahifa hali ko’rinadigan holatda emas. U HTML deb ataladigan formatda keladi va uning ichida faqat matn va tuzilma bor: qayerda sarlavha, qayerda paragraf, qaysi joyda rasm turishi kerakligi yozilgan. Rasmning o’zi esa ichida yo’q.
Shuning uchun brauzer HTML’ni o’qib chiqadi va yetishmayotgan har bir narsa uchun alohida so’rov yuboradi: sahifaning ko’rinishini belgilaydigan CSS fayllari, bosilganda ish bajaradigan JS fayllari, rasmlar, shriftlar. Hammasi kelib bo’lgach, brauzer bularni birlashtirib ekranga chizadi.
Mana shu uchtasi — HTML, CSS va JS — har qanday saytning asosi. Ularning har biri nima qilishini quyiroqda alohida ochib beraman.
Mana shu. Enter bilan sahifa orasida turgan narsa — shu besh qadam.
Lekin har bir qadam ortida javobsiz savol qolib ketdi. So’rov qanaqa kompyuterga bordi va u yerda nima turibdi? So’rovni o’sha kompyuterdagi qaysi dastur oladi? “Bosh sahifani ber” degan gap aslida qanday yoziladi? 404 nima uchun kerak? Va nihoyat, o’sha shifrlangan kanal meni aslida kimdan yashiryapti?
Endi shularning har birini birma-bir ochamiz.
So’rov bordi. Narigi tomonda nima turibdi?
Birinchi qadamda topilgan manzil — o’sha 77.88.44.55 — kimniki? So’rovimiz borgan joyda qanaqa kompyuter turibdi?
Javob biroz hafsalani pir qiladi: eng oddiy kompyuter. Ichida xuddi sizning noutbukingizdagidek protsessor, xotira va disk bor. Uni server deb atayotganimizning sababi qurilishida emas, vazifasida.
Farqi uchta narsada ko’rinadi.
Server hech qachon o’chirilmaydi. Sizning noutbukingiz kechqurun yopiladi. Server esa yillab uzluksiz ishlaydi, chunki sayt istalgan payt — kechasi soat uchda ham — ochilishi kerak. Shuning uchun serverlar odatda maxsus binolarda, ma’lumot markazlarida turadi: u yerda doimiy sovutish, tok o’chganda ishga tushadigan generator va bir nechta zaxira internet kanali bo’ladi.
Serverda monitor ham, klaviatura ham yo’q. Unga hech kim yaqin borib o’tirmaydi. Sayt egasi uni boshqa shahardan, hatto boshqa mamlakatdan turib boshqaradi.
Serverdagi dastur asosan “kutadi”. Uning kunlik ishi shundan iborat: jim turadi, so’rov kelishini poylaydi. So’rov kelsa uyg’onadi, javob beradi va yana kutishga qaytadi. Aynan shu “kutib turgan dastur” so’rovingizni qabul qiladi.
Yana bir narsani aytib qo’yish kerak: sayt egalarining ko’pchiligida o’z serveri yo’q. Kichkina sayt uchun alohida kompyuter sotib olib, uni yillab uzluksiz ishlatib turish ham qimmat, ham ortiqcha. Shuning uchun ular boshqa kompaniyaning serveridan joy ijaraga oladi — buni hosting deb ataymiz. Bunday holatda “saytning serveri” degani alohida bir kompyuter emas, kattaroq kompyuterning ijaraga olingan qismi bo’ladi.
Sayt aslida nimadan iborat?
Endi o’sha kompyuterning ichiga qaraymiz. U yerda “sayt” degan yaxlit narsa yo’q. Sayt — bu fayllar. Kimdir o’tirib yozgan fayllar.
Fayllarning uch xili bor va ularni uyning qismlariga o’xshatib tushunish oson.
HTML — uyning devorlari va xonalari. Bu sahifaning tuzilishi: qayerda sarlavha, qayerda paragraf, qayerda ro’yxat, qaysi joyda rasm turishi kerak. Ichida matnning o’zi ham shu yerda yozilgan bo’ladi. HTML bo’lmasa sahifa umuman bo’lmaydi — devorsiz uy bo’lmagani kabi.
CSS — bo’yoq, mebel va pardalar. Bu ko’rinish: ranglar, harflarning o’lchami va shakli, nimadan keyin nima turishi, qanday joylashuvi. CSS o’chib qolsa sahifa baribir ochiladi, lekin bezaksiz, quruq matn bo’lib qoladi. Ba’zan sayt ochilganda bir zumga shunday ko’rinib ketadi — demak CSS hali yetib kelmagan.
JS — elektr o’tkazgichlari va tugmalar. To’liq nomi JavaScript. Bu sahifaning xatti-harakati: tugma bosilganda nima bo’lishi, menyuning ochilishi, sahifani yangilamasdan yangi ma’lumot kelishi. JS bo’lmasa sahifa ko’rinadi, lekin qimirlamaydi.
Uchalasi ham oddiy matn faylidan iborat. Ya’ni serverda turgan narsa — odam o’qiy oladigan matn, boshqa hech narsa emas.
Sahifalar tayyor holda turadimi?
Bu yerda ikkita butunlay boshqacha holat bor.
Ba’zi sahifalar diskda tayyor yotadi. So’rov kelsa server o’sha faylni topadi va o’zgartirmasdan uzatadi. Kim so’rasa ham bir xil javob oladi. Bunday saytlarni statik deb ataymiz.
Lekin ko’p sahifalar siz so’ragan paytgacha umuman mavjud bo’lmaydi. Buni tekshirish oson: YouTube’ning bosh sahifasini oching, keyin do’stingiznikiga qarang — ikkalasi bir xil emas. Demak, uni oldindan fayl qilib yozib qo’yish imkonsiz, chunki har bir odam uchun boshqacha bo’lishi kerak.
Bunday hollarda serverdagi dastur HTML’ni so’rov kelgan zahoti yig’adi: avval kim so’rayotganini aniqlaydi, keyin kerakli ma’lumotni ma’lumotlar bazasidan oladi va shularni joy-joyiga qo’yib, tayyor HTML qaytaradi. Bunday saytlarni dinamik deb ataymiz.
Ma’lumotlar bazasi — o’sha serverdagi yana bitta alohida dastur. Uning yagona vazifasi ma’lumotni saqlab turish va so’ralganda topib berish: ro’yxatdan o’tgan odamlarning ismi, pochta manzili, paroli, ular yuklagan videolar, kim kimga obuna bo’lgani — hammasi o’sha yerda yotadi. Sayt dasturining o’zi hech narsani eslab qolmaydi, kerak bo’lganda bazadan so’rab oladi.
Brauzer uchun esa ikkalasining farqi yo’q. Unga tayyor fayl keldimi yoki bir soniya oldin yig’ilgan HTML keldimi — baribir, u ikkalasini ham bir xil o’qiydi.
Endi bitta savol qoldi. Yuqorida aytdik: serverda dastur kutib turadi. Lekin bitta kompyuterda bunday kutayotgan dastur bittami?
Kelgan so’rovni qaysi dastur oladi?
Albatta bitta emas. Bitta serverda bir vaqtda bir nechta dastur kutib turadi: biri saytni beradi, biri ma’lumotlar bazasi, yana biri sayt egasi masofadan ulanib ish qilishi uchun ochiq turadi.
Mana shu yerda muammo ko’rinadi. IP manzil sizni kompyuterga olib keladi. Lekin kompyuterning o’zida bitta eshik emas, o’nlab eshik bor. Kelgan baytlarni ulardan qaysi biri olishi kerak?
O’tgan maqolada IP manzilni uy manziliga o’xshatgan edik. O’xshatishni davom ettiramiz: IP manzil — ko’p qavatli uyning manzili, port esa o’sha uydagi xonadon raqami. Faqat ikkalasi birga bo’lgandagina xat aniq bir eshikka yetib boradi.
Port ham oddiy son: 0 dan 65535 gacha. Kutayotgan har bir dastur o’ziga bittasini tanlab oladi va “shu raqamga kelgan hamma narsa meniki” deb egallab turadi. Bitta portni ikkita dastur bo’lisha olmaydi.
Kichik raqamlar esa hamma uchun oldindan kelishib qo’yilgan:
- 80 — http, ya’ni oddiy sayt
- 443 — https, ya’ni shifrlangan sayt
- 53 — DNS so’rovlari
- 25 — pochta
- 22 — serverni masofadan turib boshqarish
Aynan shu kelishuv tufayli siz brauzerga hech qachon port yozmaysiz. Manzil “https://” bilan boshlansa, brauzer 443 ni o’zi qo’shib qo’yadi; “http://” bo’lsa 80 ni qo’yadi.
Lekin xohlasangiz ochiq yozsa ham bo’ladi — yandex.uz:443 deb yozilgani ham xuddi shu ma’noni beradi. Dasturchilar o’z kompyuterida sayt yasab o’tirganda ko’pincha shunday manzillar ko’rinadi: localhost:3000 yoki 127.0.0.1:8080. Bu “shu kompyuterning o’zida, 3000-portda kutib turgan dastur” degani.
Yana bir narsa bor va u ko’pincha e’tibordan chetda qoladi: port faqat serverda emas, sizda ham bor. Brauzer so’rov yuborayotganda o’ziga ham bitta bo’sh port ajratib oladi va so’rovning ichiga “javobni shu raqamga qaytar” deb yozib qo’yadi.
Javobning adashmasligi ana shundan. Bir vaqtda o’nta sayt ochiq bo’lsa ham, har birining so’rovi o’z porti bilan ketadi va qaytgan javob aynan o’sha saytga tushadi. Aks holda YouTube’dan kelgan video pochtangiz ochilgan saytda paydo bo’lardi.
Demak paketning boshidagi yozuv endi kengaydi: avval faqat ikkita manzil bor edi, endi ularning yoniga ikkita port ham qo’shildi. Kimdan — manzil va port, kimga — manzil va port. Aynan shu to’rtlik bitta suhbatni boshqasidan ajratib turadi.
So’rov to’g’ri kompyuterga bordi, u yerda to’g’ri dasturga tushdi. Endi qizig’iga keldik: brauzer o’sha dasturga aynan nima deb gapiradi?
Brauzer serverga nima deb gapiradi?
Bu yerda eng kutilmagan narsa shu: HTTP so’rovi — oddiy matn. Sir ham emas, murakkab format ham emas. Odam o’qib tushunadigan bir necha qator, xolos.
Brauzer yandex.uz bosh sahifasini so’raganda taxminan shunday matn yuboriladi:
GET / HTTP/1.1
Host: yandex.uz
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html
Accept-Language: uz,ru
Hammasi shu. Endi qatorma-qator ko’rib chiqamiz.
Birinchi qator — gapning o’zi. U uchta bo’lakdan iborat: nima qilish kerak, nimani, va qaysi qoidalar bo’yicha gaplashyapmiz.
“GET” — “ber” degani. “/” — saytning bosh sahifasi. Agar siz yandex.uz/pochta ni so’rasangiz, bu joyda “/pochta” turadi. “HTTP/1.1” esa protokolning versiyasi: HTTP yillar davomida bir necha marta yangilangan va ikkala tomon qaysi versiyada gaplashayotganini bilib turishi kerak. Versiyalar orasidagi farqqa keyingi maqolalarda alohida to’xtalaman.
Qolgan qatorlar — sarlavhalar. Har biri “nom: qiymat” ko’rinishida yoziladi va so’rovga qo’shimcha ma’lumot qo’shadi. Ularsiz ham so’rov ishlaydi, lekin javob ancha qo’polroq bo’ladi:
- “Host” — menga aynan qaysi sayt kerakligi
- “User-Agent” — so’rovni qanday brauzer va qanday qurilma yuborayotgani
- “Accept” — brauzeringiz qanday ko’rinishdagi javobni tushuna olishi
- “Accept-Language” — qaysi til afzal ko’rilishi
“Host” qatoriga alohida to’xtalish kerak, chunki u birinchi qarashda ortiqcha tuyuladi. Axir manzilni allaqachon topdik-ku, so’rov o’sha kompyuterga ketyapti-ku? Gap shundaki, bitta serverda yuzlab sayt turishi mumkin — ijaraga olingan serverlarda odatda shunday bo’ladi. Ularning hammasi bitta manzilda, bitta portda turadi. Shuning uchun server so’rovni ochib “Host” qatorini o’qimaguncha, qaysi saytning sahifasini berish kerakligini bilmaydi.
“Accept-Language” esa ba’zi saytlarning nega o’zi sizning tilingizda ochilishini tushuntiradi. Siz hech narsa tanlamaysiz — brauzer tilingizni har bir so’rovda o’zi aytib boradi.
Endi ikkinchi savol: GET yolg’izmi? Yo’q. Bir nechta buyruq bor, lekin kundalik hayotda ikkitasi ko’p uchraydi.
- GET — ma’lumot so’rash. Sahifani ochish, rasmni olish, qidiruv natijasini so’rash.
- POST — ma’lumot yuborish. Formani to’ldirib “Yuborish” bosganingizda, login va parol kiritganingizda.
POST bo’lganda so’rovga yana bitta qism qo’shiladi. Sarlavhalardan keyin bo’sh qator qoldiriladi va undan keyin yuborilayotgan ma’lumotning o’zi yoziladi:
POST /login HTTP/1.1
Host: yandex.uz
Content-Type: application/x-www-form-urlencoded
login=user&parol=12345
Ikkalasining farqi amalda quyidagicha ko’rinadi. Yandexda biror narsa qidirib ko’ring va brauzerning eng tepasidagi manzil qatoriga qarang. Siz yozgan so’zlar o’sha yerda turgan bo’ladi:
yandex.uz/search/?text=toshkent+ob-havo
Bu — GET. So’ralayotgan narsa manzil qatoriga ochiq yozilgan. Shuning uchun uni nusxalab do’stingizga yuborsangiz, u ham xuddi shu natijani ko’radi.
Endi saytga kirayotganingizni tasavvur qiling: login va parolni yozdingiz, “Kirish” tugmasini bosdingiz. Manzil qatorida esa avvalgidek “yandex.uz/login” turibdi — parolingiz u yerda ko’rinmaydi. Bu — POST. Yuborilgan ma’lumot manzilga emas, so’rovning ichiga, yuqorida ko’rgan bo’sh qatordan keyin yozilgan.
Farq nega muhim? Chunki manzil qatoriga tushgan narsa keyin ko’p joyda qolib ketadi: brauzer tarixida, siz nusxalagan havolada, yo’l-yo’lakay uni ko’rgan qurilmalarning yozuvlarida. Parolni bunday joylarga chiqarib bo’lmaydi. Shuning uchun u hech qachon GET bilan yuborilmaydi.
Lekin bitta narsani hozircha yodda tutib turing. Yuqoridagi ikkala so’rov ham — parol yozilgani ham — oddiy matn. Agar manzil “http://” bilan boshlansa, bu matn yo’l bo’yi shu holicha, hech qanday himoyasiz ketadi. Buni quyiroqda yana eslaymiz.
So’rov ketdi. Endi server nima deb javob berishiga qaraymiz.
Server nima deb javob beradi?
Javob ham xuddi so’rov kabi oddiy matn va tuzilishi ham deyarli bir xil: birinchi qator, keyin sarlavhalar, keyin bo’sh qator, undan keyin esa so’ralgan narsaning o’zi.
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 15384
<!doctype html>
<html>
...
Bu yerda eng muhimi — birinchi qator. Undagi “200” so’rovning taqdirini bitta raqam bilan aytib beradi. Yonidagi “OK” esa faqat odam o’qishi uchun qo’yilgan izoh, dastur unga qaramaydi.
Status kodlar uch xonali bo’ladi va ularni yodlab olish shart emas. Birinchi raqamiga qarab qaysi guruhga tegishli ekanini bilib olish yetarli:
- 2xx — bo’ldi. So’ralgan narsa topildi va berildi.
- 3xx — bu yerda emas. Boshqa manzilga borish kerak.
- 4xx — so’rovda muammo bor. Ya’ni ayb so’ragan tomonda.
- 5xx — serverda muammo bor. So’rov to’g’ri edi, lekin server uddalay olmadi.
Endi eng ko’p uchraydiganlari.
200 — hammasi joyida. Kunlik hayotda siz ochgan har bir sahifa, har bir rasm shu kod bilan keladi. Ko’rmaysiz, chunki hammasi ishlaganda hech kim sizga kod ko’rsatmaydi.
301 va 302 — boshqa manzilga o’ting. Server “bu sahifa bu yerda emas, falon manzildan so’ra” deydi va yangi manzilni ham qo’shib yuboradi. Brauzer esa buni sizdan so’ramasdan bajaradi: darrov yangi manzilga so’rov yuboradi.
Buni qisqartirilgan havolalarda yaqqol ko’rish mumkin. Kimdir sizga qisqagina havola tashlaydi, bosasiz — va ochilgan sahifaning manzili butunlay boshqacha, uzun bo’lib chiqadi. Sababi oddiy: o’sha qisqa manzilda hech qanday sahifa yo’q edi. U faqat “aslida falon joyga bor” degan javobni qaytardi, brauzer esa aytilgan joyga o’zi bordi.
301 va 302 ning farqi shunda: 301 — “butunlay ko’chdim, bundan keyin ham o’sha yerdan so’ra”, 302 — “vaqtincha boshqa joydaman”.
404 — bunday sahifa yo’q. Bu yerda ko’pchilik yanglishadi. 404 kelgan bo’lsa, demak hammasi ishladi: manzil topildi, kanal ochildi, server so’rovni oldi va o’qidi. Faqat siz so’ragan sahifa o’sha saytda mavjud emas, xolos. Ya’ni 404 — sayt ishlamayotganining emas, aksincha, ishlab turganining belgisi.
403 va 401 — ruxsat yo’q. Ikkalasi o’xshash, lekin farqi bor. 401 — “siz kim ekaningizni bilmayman, avval tizimga kiring”. 403 — “kim ekaningizni bilaman, lekin bu joyga kirishingiz mumkin emas”.
500 — serverda xatolik. So’rovingiz to’g’ri edi, lekin serverdagi dasturda nimadir buzildi. Bu sizning aybingiz emas va sahifani qayta yuklab ham odatda foyda bo’lmaydi — tuzatish sayt egasining qo’lida.
Javobdagi sarlavhalarga ham qarab qo’yaylik, chunki ular orasida bittasi juda muhim. “Content-Type” — bu javobning ichida nima kelayotganini aytadi: veb sahifami, rasmmi, videomi. Brauzer aynan shunga qarab ish tutadi. Bir xil baytlarni sahifa deb chizish ham, rasm deb ko’rsatish ham mumkin — qaysi biri ekanini brauzer o’zi taxmin qilmaydi, server aytib yuboradi.
Javob keldi, kodi 200, ichida HTML bor. Sahifa tayyor deb o’ylashingiz mumkin. Lekin yo’q — so’rovlar endi boshlanadi.
Nega bitta sahifa uchun o’nlab so’rov ketadi?
Serverdan kelgan HTML — tayyor sahifa emas, sahifaning ro’yxati. Uning ichida “bu joyga falon rasm qo’yiladi”, “sahifaning ko’rinishi falon faylda yozilgan”, “falon dastur ham yuklab olinsin” degan ko’rsatmalar turadi. Ko’rsatilgan narsalarning o’zi esa ichida yo’q — faqat ularning manzillari bor.
Shuning uchun brauzer HTML’ni yuqoridan pastga o’qib chiqadi va har bir ko’rsatmani uchratganda yangi so’rov yuboradi. Ular ham xuddi yuqorida ko’rganimizdek GET so’rovlari, faqat endi bosh sahifa emas, aniq bir fayl so’raladi.
Nechta so’rov bo’ladi? Oddiy, bezaksiz sahifada beshta-o’ntadan oshmaydi. Yirik saytning bosh sahifasida esa yuzdan oshib ketishi mumkin: o’nlab rasm, bir nechta shrift, bezak fayllari, sahifani harakatga keltiradigan dasturlar. Bitta sahifa uchun bir necha megabayt ma’lumot yuklab olinadi.
Mana shu sahifaning bosqichma-bosqich paydo bo’lishini tushuntiradi. Ba’zan sayt ochilganda avval quruq matn ko’rinib qoladi, keyin bir zumda hammasi joyiga tushadi, rasmlar esa eng oxirida to’ladi. Bu sekin internet belgisi emas — shunchaki fayllar birin-ketin yetib kelmoqda.
Yana bir narsa bor va u ko’pchilikni hayron qoldiradi: bu so’rovlarning hammasi ham yandex.uz’ga ketmaydi. Rasmlar boshqa manzildan, shriftlar uchinchi manzildan, tashrifingizni sanab boradigan qismlar esa umuman boshqa kompaniyaning serveridan kelishi mumkin. Ya’ni bitta sahifani ochganingizda siz ko’pincha bir nechta tashkilot bilan gaplashib bo’lgan bo’lasiz — bundan xabaringiz bo’lmasa ham.
Yaxshi tomoni shundaki, bu so’rovlarning har biri uchun yangi kanal ochilmaydi. Bir marta ochilgan kanal ochiq turadi va o’nlab so’rov birin-ketin o’sha kanaldan o’tadi. Aks holda har bir rasm uchun “tayyormisan?” — “tayyorman” dan boshlash kerak bo’lardi va sahifa ancha sekin ochilardi.
Shunda ham bitta savol qoladi. Shuncha fayl har safar qaytadan yuklab olinadimi? Ertaga o’sha saytni yana ochsangiz, hammasi yangidan so’raladimi?
Nega sayt ikkinchi marta tezroq ochiladi?
Yo’q, hammasi qaytadan so’ralmaydi. Brauzer yuklab olgan fayllarni o’chirib tashlamaydi — ularni diskda saqlab qo’yadi. Bu saqlangan nusxalar kesh deb ataladi.
Ikkinchi marta o’sha saytga kirganingizda brauzer avval o’z keshiga qaraydi. Kerakli fayl u yerda bo’lsa, so’rov umuman yuborilmaydi: fayl diskdan olinadi. Diskdan o’qish esa internetdan so’rashdan yuz barobar tez.
Nimalar saqlanadi? Odatda o’zgarmaydigan narsalar: sayt logotipi, shriftlar, bezak fayllari, sahifani harakatga keltiradigan dasturlar. Yangiliklar matni yoki sizning xabarlaringiz kabi doim o’zgarib turadigan qismlar esa saqlanmaydi — ular har safar yangidan so’raladi.
Qaysi faylni qancha saqlash kerakligini brauzer o’zi hal qilmaydi. Buni server javob bilan birga aytib yuboradi:
Cache-Control: max-age=31536000
Bu “shu faylni bir yil davomida saqlab tur, mendan qayta so’rashing shart emas” degani. Raqam soniyada berilgan: 31536000 soniya — roppa-rosa bir yil.
Ba’zan esa brauzer ishonchi komil bo’lmaydi: fayl keshda bor, lekin eskirgan bo’lishi mumkin. Shunda u faylni qaytadan so’ramaydi, faqat qisqagina savol yuboradi: “menda shu faylning eski nusxasi bor, u o’zgardimi?” Agar o’zgarmagan bo’lsa, server juda qisqa javob qaytaradi:
HTTP/1.1 304 Not Modified
Ichida hech narsa yo’q — na rasm, na matn. Faqat “o’zgarmadi, o’zingdagini ishlataver” degan xabar. Bir necha yuz bayt bir necha megabaytlik yuklashning o’rnini bosadi.
Bu qulaylikning teskari tomoni ham bor va u sayt egalariga tanish. Aytaylik, sayt bezagi o’zgartirildi. Lekin odamlarning brauzerida eski bezak fayli saqlanib turibdi va u “bir yil saqla” degan ko’rsatma bilan kelgan edi. Natijada odamlar hali ham eski ko’rinishni ko’rishadi.
Buning yechimi oddiy: fayl o’zgarganda uning nomi ham o’zgartiriladi. Shuning uchun saytlarda ba’zan “bezak.a83f21.css” kabi g’alati nomlar uchraydi. Ichidagi narsa o’zgardi — nomi ham o’zgardi — demak brauzer uchun bu butunlay yangi fayl va u qaytadan yuklab olinadi.
Shu sababli “sayt buzilib qolibdi” degan holatlarda birinchi maslahat ko’pincha bitta bo’ladi: sahifani oddiy emas, keshni chetlab o’tib yangilash yoki brauzer keshini tozalash. Ko’p hollarda muammo saytda emas, sizdagi eski nusxada bo’ladi.
Oxirgi bir izoh: kesh faqat sizning kompyuteringizda emas. Yo’ldagi boshqa joylarda ham nusxalar saqlanadi — masalan sayt fayllarini dunyoning turli burchagida saqlab turadigan maxsus serverlarda. Aynan shuning hisobiga Amerikada joylashgan sayt ham bizda tez ochiladi.
Xullas, brauzer o’zi yuklab olgan narsalarni eslab qoladi. Lekin teskari tomoni-chi? Server sizni eslab qoladimi? Axir bir marta parol kiritganingizdan keyin u sizni qayta-qayta so’ramaydi-ku.
Server sizni qayerdan eslab qoladi?
Aslida eslab qolmaydi. HTTP shunday tuzilganki, har bir so’rov mustaqil keladi: server so’rovni oladi, javob beradi va darrov unutadi. Bir soniya oldin xuddi shu odam so’rov yuborganini u bilmaydi.
Buni tasavvur qilish uchun do’kondagi sotuvchini o’ylang, u har safar eshikdan chiqib kirganingizda sizni birinchi marta ko’rayotgan bo’lsa. Har gal qaytadan tanishish kerak.
Bu ataylab shunday qilingan. Serverga bir vaqtning o’zida millionlab odam murojaat qiladi va ularning har birini yodda saqlab turish og’ir. So’ra — javob ol — tugadi degan qoida ancha yengil.
Lekin shu yerda muammo ko’rinadi. Agar server hech kimni eslab qolmasa, pochtangizga bir marta kirganingizdan keyin nega har bir sahifada paroldan qayta so’ramaydi? Axir har bir sahifa — alohida so’rov-ku.
Yechim juda oddiy: eslab qolishni serverga emas, sizga yuklashadi.
Siz parolni to’g’ri kiritganingizda server javobiga bitta sarlavha qo’shib yuboradi:
Set-Cookie: session=8f4c1ab3e9
Bu “mana senga raqam, buni saqlab qo’y” degani. Brauzer uni saqlaydi va shundan keyin o’sha saytga yuborilgan har bir so’rovga o’sha raqamni qo’shib yuboradi:
Cookie: session=8f4c1ab3e9
Endi server sizni tanishi uchun hech narsani eslab qolishi shart emas. So’rov kelganda raqamga qaraydi, ma’lumotlar bazasidan “bu raqam kimga tegishli?” deb so’raydi va javobini oladi. Shundan keyin sahifani aynan siz uchun tayyorlaydi.
Bu narsani kiyim ilgichdagi jetonga o’xshatish mumkin. Xodim sizning yuzingizni eslab qolmaydi — sizga raqam beradi, xolos. Raqamni ko’rsatsangiz paltongizni topib beradi. Kim ekaningizni bilmasa ham, ish bajariladi.
Saqlangan bunday raqam cookie deb ataladi. Bir necha muhim jihati bor.
Cookie ichida odatda sizning ma’lumotingiz turmaydi. U shunchaki tasodifiy raqam. Ismingiz, pochtangiz, parolingiz esa serverdagi ma’lumotlar bazasida qoladi. Cookie — o’sha yozuvga olib boradigan kalit, xolos.
“Meni eslab qol” degan belgi ham shu bilan bog’liq. Uni belgilasangiz cookie uzoq muddatga saqlanadi, belgilamasangiz brauzerni yopganingizda o’chib ketadi.
Brauzer ma’lumotlarini tozalaganingizda hamma saytdan chiqib ketasiz. Sababi endi tushunarli: siz parolni emas, o’sha jetonlarni o’chirdingiz.
Kimdir cookie’ngizni qo’lga kiritsa, u sizga aylanadi. Parol bilmasa ham bo’ladi — server raqamga qaraydi, xolos. Xuddi jetonni yo’qotib qo’ygandek: uni topib olgan odam paltongizni olib ketaveradi.
Oxirgi jihat esa reklama bilan bog’liq. Yodingizdami, bitta sahifani ochganda so’rovlar bir nechta boshqa kompaniyaga ham ketadi degan edik. O’sha kompaniyalar ham cookie qoldiradi. Ularning kodi yuzlab saytga qo’yilgan bo’lsa, siz qaysi saytga kirsangiz ham bir xil raqam ko’rinadi. Shu tariqa yurgan yo’lingiz yig’ilib boradi. Bir marta krossovka qidirsangiz, keyin butunlay boshqa saytlarda krossovka reklamasini ko’rishingizning sababi shu.
Endi hammasi bir joyga keladi. So’rov ham, javob ham, parol ham, cookie ham — hammasi oddiy matn bo’lib yo’lga chiqadi. Ular esa uydagi router, provayder, o’nlab begona qurilma orqali o’tadi.
Demak oxirgi savol: bu matnni yo’lda kim o’qiy oladi?
Yo’ldagilar mening parolimni o’qiy oladimi?
Buni bilish uchun avval yo’lda kim borligini eslash kerak. O’tgan maqolada ko’rgan edik: paketlaringiz to’g’ridan-to’g’ri serverga uchmaydi, o’nlab qurilma orqali qo’ldan-qo’lga o’tadi. Uydagi router, kafedagi Wi-Fi, provayderning uskunasi, undan keyingi routerlar. Har biri paketni qo’liga oladi va keyingisiga uzatadi.
Endi shu paketning ichida oddiy matn turganini tasavvur qiling:
POST /login HTTP/1.1
Host: example.uz
login=user&parol=12345
Agar sayt bilan “http” orqali gaplashayotgan bo’lsangiz, yo’ldagi har bir qurilma buni xohlagancha o’qiy oladi. Bu ochiq otkritka yuborganga o’xshaydi: pochtachi ham, yo’ldagi hamma ham matnni ko’rib turadi. Faqat o’qish bilan ham cheklanmaydi — matnni almashtirib qo’yish ham mumkin.
“https” aynan shu muammoni yechadi. Undagi “s” harfi — “secure”, ya’ni himoyalangan degani. So’rov ham, javob ham o’sha-o’sha HTTP bo’lib qolaveradi, faqat yo’lga chiqishdan oldin shifrlanadi. Otkritka konvertga solinadi va konvert yelimlanadi.
Pochtachi konvertni baribir tashiydi — u kimdan kimga ketayotganini biladi, lekin ichidagini o’qiy olmaydi. Shifrni ochadigan kalit faqat ikki tomonda bor: sizning brauzeringizda va serverda. Yo’ldagi qurilmalar uchun paket ichida ma’nosiz belgilar to’plami turadi.
Shuning uchun bugun kafedagi ochiq Wi-Fi orqali pochtangizga kirsangiz ham parolingiz yo’lda ushlanmaydi. Bir necha yil oldin bu haqiqiy xavf edi, chunki saytlarning ko’pi hali “http” da ishlardi.
Nimalar yashirilishini aniq bilib qo’ygan ma’qul.
Yashiriladi: so’rovning o’zi, hamma sarlavhalar, cookie, parol, qidiruv so’zlaringiz, serverdan kelgan javob — sahifaning butun mazmuni.
Yashirilmaydi: qaysi saytga kirganingiz. Provayder yandex.uz ga ulanganingizni ko’radi, chunki manzilni topish uchun DNS so’rovi ketgan va paketning ustida server IP’si yozib qo’yilgan. Lekin o’sha yerda nima qidirganingizni bilmaydi.
Ya’ni konvertning ustidagi manzil ochiq turadi, ichidagi xat esa yopiq.
Endi ikkinchi savol tug’iladi. Xatni yelimladik, mayli. Lekin konvert haqiqatan ham yandex’ning o’ziga ketayotganini qayerdan bilamiz? Kimdir yo’lda turib olib “men yandex’man” desa-chi? U holda siz konvertni o’z qo’lingiz bilan o’g’riga berib qo’yasiz.
Shuning uchun kanal ochilayotganda server o’zining sertifikatini ko’rsatadi. Sertifikat — bu saytning pasporti. Unda saytning domeni, amal qilish muddati va uni bergan tashkilotning imzosi turadi.
Sertifikatni saytning o’zi yozib olmaydi. Uni sertifikat markazlari deb ataladigan tashkilotlar beradi va berishdan oldin domen haqiqatan ham so’rayotgan odamnikimi, shuni tekshiradi. Brauzeringizning ichida esa ishonchli markazlarning ro’yxati oldindan yozib qo’yilgan.
Demak brauzer uch narsani tekshiradi: sertifikat manzil qatoridagi domenga tegishlimi, muddati o’tmaganmi va uni tanish markaz imzolaganmi. Uchalasi joyida bo’lsa — kanal ochiladi, siz hech narsani sezmaysiz.
Bittasi joyida bo’lmasa — brauzer sahifani ochish o’rniga katta ogohlantirish chiqaradi. “Bu saytga ishonib bo’lmaydi” degan qizil ekranni ko’rgan bo’lsangiz, ko’pincha sabab shu bo’ladi.
Va nihoyat, eng ko’p adashiladigan joy. Manzil qatoridagi qulf belgisi saytning halolligini bildirmaydi.
Qulf faqat ikki narsaga kafolat beradi: kanal shifrlangan va siz manzil qatorida yozilgan domenning o’zi bilan gaplashyapsiz. Bu domen kimga tegishli va u sizni aldayaptimi — qulfning bunga aloqasi yo’q. Firibgar sayt ham sertifikat olishi mumkin, buning uchun pul ham to’lamaydi.
Ya’ni qulf “xat yo’lda o’qilmadi” deydi, “xatni oluvchi yaxshi odam” demaydi. Shuning uchun qulfga emas, domenning o’ziga diqqat qilish kerak: yandex.uz bilan yandex-uz.com ikki xil sayt va ikkalasida ham qulf turishi mumkin.
Xullas, kanal shifrlandi, suhbatdosh tekshirildi, xat esa faqat ikki tomonga o’qiladigan bo’lib qoldi. Endi maqolaning boshidagi besh qadamga qaytsak bo’ladi — bu safar ularning hech biri qorong’i qolmaydi.
Enter bosgandan sahifa ko’ringuncha
Maqola boshida besh qadamni sanagan edik, lekin o’shanda ularning yarmi qorong’i so’zlardan iborat edi. Endi hammasi aniq bo’ldi. Shuning uchun o’sha yo’lni yana bir marta, bu safar to’liq holida bosib o’tamiz.
1. Enter bosildi.
Brauzer manzilni bo'laklarga ajratadi:
protokol — https, domen — yandex.uz, yo'l — /
|
v
2. Domen manzilga aylantiriladi.
DNS: "yandex.uz qayerda?" -> 77.88.44.55
Bu javob oldindan eslab qolingan bo'lsa, qadam o'tkazib yuboriladi.
|
v
3. Kanal ochiladi.
Manzilning 443-portiga: "tayyormisan?" — "tayyorman".
|
v
4. Kanal shifrlanadi.
Server sertifikatini ko'rsatadi, brauzer uni tekshiradi.
Shundan keyin ikkalasi shifrlash kalitiga kelishadi.
|
v
5. So'rov yuboriladi.
GET / HTTP/1.1
Host: yandex.uz
Cookie: session=8f4c1ab3e9
|
v
6. Server so'rovni o'qiydi.
Cookie orqali kim kelganini aniqlaydi,
kerakli ma'lumotni bazadan oladi va HTML yig'adi.
|
v
7. Javob qaytadi.
HTTP/1.1 200 OK
Content-Type: text/html
<!doctype html> ...
|
v
8. Brauzer HTML'ni o'qiydi.
Yetishmayotgan narsalarning ro'yxatini tuzadi:
CSS, JS, rasmlar, shriftlar.
|
v
9. Har biri uchun yana so'rov ketadi.
Keshda turganlari so'ralmaydi. Qolganlari uchun 5—7 qadamlar
qaytariladi. Boshqa serverdan olinadiganlari uchun esa
yo'l 2-qadamdan boshlanadi.
|
v
10. Sahifa chiziladi.
CSS ko'rinishni belgilaydi, JS tugmalarni jonlantiradi.
Ro’yxat uzun ko’rinadi, lekin ikkita narsani aytib qo’yish kerak.
Birinchisi — bularning hammasi ketma-ket kutib turmaydi. Brauzer HTML’ni oxirigacha o’qib bo’lishini kutmaydi: yo’l-yo’lakay uchragan har bir faylni darrov so’rayveradi. Shuning uchun sahifa bo’lak-bo’lak paydo bo’ladi.
Ikkinchisi — ikkinchi marta kirganingizda bu yo’lning yarmi qisqaradi. Domenning manzili eslab qolingan, fayllarning ko’pchiligi keshda. Ko’pincha bitta HTML so’rovi bilan ish bitadi.
Va endi eng boshdagi jumlaga qaytamiz: bularning hammasi yarim soniyada sodir bo’ladi. Har safar sayt ochganingizda.
Qisqacha
Maqolada uchragan atamalarni bir joyga yig’ib qo’yamiz. Biror joyda esdan chiqsa, shu ro’yxatga qaytib qarasangiz bo’ladi.
- Server — so’rov kelishini kutib turadigan kompyuter. Tuzilishi bo’yicha oddiy kompyuter, farqi shundaki u hech qachon o’chirilmaydi.
- Klient — so’rovni yuborayotgan tomon: sizning qurilmangiz va undagi brauzer.
- Hosting — o’z serveri yo’q sayt egalari ijaraga oladigan joy. Bitta serverda o’nlab, ba’zan yuzlab sayt turadi.
- HTML — sahifaning tuzilishi: qayerda sarlavha, qayerda paragraf, qaysi joyda rasm turishi. Sahifaning devorlari.
- CSS — sahifaning ko’rinishi: ranglar, harflar, joylashuv. Bo’yoq va mebel.
- JS — sahifaning xatti-harakati: tugma bosilganda nima bo’lishi. Elektr va tugmalar.
- Statik sayt — sahifalari diskda tayyor yotadi va hammaga bir xil beriladi.
- Dinamik sayt — sahifa siz so’ragan paytda, aynan siz uchun yig’iladi.
- Ma’lumotlar bazasi — serverdagi alohida dastur. Ismlar, parollar, xabarlar — hammasi shu yerda saqlanadi.
- Port — kompyuter ichidagi xonadon raqami: 0 dan 65535 gacha. 80 — http, 443 — https.
- HTTP — brauzer bilan server gaplashadigan qoidalar. So’rov ham, javob ham oddiy matndan iborat.
- GET va POST — ma’lumot so’rash va ma’lumot yuborish. GET so’ragan narsangiz manzilda ko’rinadi, POST bilan yuborilgani so’rovning ichida ketadi.
- Sarlavhalar — so’rov va javobga qo’shiladigan “nom: qiymat” qatorlari: Host, Accept-Language, Content-Type.
- Status kod — javobning birinchi qatoridagi raqam. 200 — bo’ldi, 301 — boshqa manzilga o’ting, 404 — bunday sahifa yo’q, 500 — serverda xatolik.
- Kesh — brauzer saqlab qo’ygan nusxalar. Sayt ikkinchi marta shuning hisobiga tezroq ochiladi.
- Cookie — server bergan tasodifiy raqam. Brauzer uni har bir so’rovga qo’shib yuboradi, server esa shu orqali sizni tanib oladi.
- HTTPS — shifrlangan kanal. Yo’ldagilar paketni ko’radi, lekin ichidagini o’qiy olmaydi.
- Sertifikat — saytning pasporti. Brauzer u orqali narigi tomon rostdan ham o’sha domen ekanini tekshiradi.
Ro’yxatdagi har bir atama yuqorida o’z bo’limida ochib berilgan. Endi esa manzil qatoriga biror narsa yozib Enter bosganingizda, ortida nima turganini bilasiz.