IlmHamroh
JavaScript Full-stack/2-qism. Internet, veb va brauzer8/20-dars16 daqiqa
Mundarija (34)

HTTP sarlavhalari: MIME turlari, cookie va kesh

Qisqacha: HTTP sarlavhalari (headers) — so'rov va javob ustidagi Nom: qiymat ko'rinishidagi yorliqlar. Masalan, Content-Type javob nima ekanini aytadi: HTML, rasm yoki JSON. Cookie sarlavhalari sayt sizni "eslab qolishi"ga yordam beradi. Kesh sarlavhalari (Cache-Control, ETag) esa faylni qayta yuklamaslikni boshqaradi.

Bu darsda

  • Sarlavha nima ekanini va uni curl -I bilan qanday ko'rishni bilasiz.
  • MIME turini (text/html, application/json, image/png) o'qiy olasiz va Content-Type bilan Accept farqini tushuntira olasiz.
  • Cookie qanday ishlashini va HttpOnly, Secure, SameSite atributlari nimadan himoya qilishini bilasiz.
  • Cache-Control, ETag va 304 Not Modified yordamida kesh qanday ishlashini o'z ko'zingiz bilan ko'rasiz.
  • CSS yuklanmay qolishi va "yangilanish ko'rinmayapti" kabi keng tarqalgan muammolarning sababini topasiz.

Oldin bilishingiz kerak: Client–server modeli va HTTP xabari, HTTP metodlari va status kodlari, Matnli va binar fayllar.

1. Nega bu kerak?

Oldingi darsda javobning birinchi qatorini — status kodini o'rgandik. 200 OK — "hammasi joyida". Lekin brauzerda hali ham savollar ko'p.

Malika onlayn do'kon ochdi. Uning sayti brauzerga har xil fayllar yuboradi: HTML sahifa, CSS, logotip rasmi, mahsulotlar ro'yxati. Matnli va binar fayllar darsida ko'rgandik: tarmoqdan kelgan narsa — shunchaki baytlar. Brauzer quyidagilarni qayerdan biladi?

  • Bu baytlar rasmmi yoki HTML'mi? Chizish kerakmi yoki yuklab olish?
  • Mijoz 5 daqiqa oldin login qilgan edi. Server uni qanday taniydi? Axir HTTP xotirasiz (stateless) edi.
  • Logotip har safar qayta yuklansinmi? Telefonda internet sekin bo'lsa-chi?

Uchala savolning javobi — sarlavhalarda. Bu darsda eng muhimlari bilan tanishamiz.

2. Sarlavha nima?

2.1 Yorliq sifatida sarlavha

Pochtaga posilka jo'natganingizni eslang. Qutining ichida — narsa. Qutining ustida esa yorliq: "Ehtiyot bo'ling, shisha", "Kimga", "Og'irligi 2 kg". Pochtachi qutini ochmaydi — faqat yorliqni o'qib, nima qilishni biladi.

Sarlavha (header) — HTTP xabarining xuddi shunday yorlig'i. Xabar tanasi (body) — qutining ichi, sarlavhalar — ustidagi yozuvlar. Har bir sarlavha bitta qatorda yoziladi: avval nom, keyin ikki nuqta, keyin qiymat.

http
Content-Type: text/html
Content-Length: 1250

2.2 Haqiqiy sarlavhalarni ko'ramiz

Terminalda curl -I buyrug'i serverdan faqat sarlavhalarni so'raydi (tanani emas). -I — --head ning qisqasi: u oldingi darsdagi HEAD metodini yuboradi. Git Bash'da yozing:

bash
curl -I https://example.com

Maslahat: Windows PowerShell 5.1 da curl — boshqa buyruqning taxallusi. U yerda curl.exe -I https://example.com deb yozing. Buni PowerShell darsida ko'rgan edik.

Natija (2026-yil sentabr, qisqartirilgan):

text
HTTP/1.1 200 OK
Date: Mon, 28 Sep 2026 12:30:23 GMT
Content-Type: text/html
Connection: keep-alive
Server: cloudflare
last-modified: Sat, 26 Sep 2026 09:10:30 GMT
Age: 11992
cf-cache-status: HIT

Birinchi qator — tanish status qatori. Qolganlari — sarlavhalar. Bir nechtasini o'qib ko'ramiz:

  • Content-Type: text/html — "ichida HTML sahifa bor".
  • Server: cloudflare — javobni qaysi server dasturi bergan.
  • Age: 11992 — bu javob keshda 11 992 soniya (3 soatdan ko'proq) turibdi. Kesh haqida pastroqda, alohida bo'limda gaplashamiz.

E'tibor bering: last-modified kichik harf bilan, Content-Type katta harf bilan yozilgan. Sarlavha nomida katta-kichik harf farq qilmaydi — content-type va Content-Type bir xil narsa. HTTP/2 da esa hamma nomlar kichik harfda yuboriladi.

cf-cache-status kabi nomlarni standartda topmaysiz. Server o'zi uchun yangi sarlavha qo'shishi mumkin — bu yerda Cloudflare shunday qilgan.

2.3 Kim qaysi sarlavhani yuboradi?

Ba'zi sarlavhalar faqat so'rovda, ba'zilari faqat javobda keladi, ba'zilari ikkalasida ham:

Sarlavha Kim yuboradi Nima deydi
Host Brauzer Qaysi saytga murojaat
User-Agent Brauzer "Men qanday dasturman"
Accept Brauzer "Menga shu formatlar kerak"
Cookie Brauzer Saqlangan cookie'lar
Content-Type Ikkalasi Tanadagi ma'lumot turi
Set-Cookie Server "Buni saqlab qo'y"
Cache-Control Ikkalasi Keshlash qoidasi
Location Server "Boshqa manzilga o't"

Tekshirib ko'ring: CONTENT-TYPE: text/html va content-type: text/html — bu ikki xil sarlavhami?

Javob

Yo'q, bir xil. HTTP sarlavha nomlarida katta-kichik harfni farqlamaydi. Shuning uchun curl chiqishida bir javobning o'zida Content-Type va last-modified aralash uchrashi mumkin.

3. MIME turlari: Content-Type va Accept

3.1 MIME turi nima?

MIME turi (MIME type) — ma'lumot turining standart nomi. U ikki qismdan iborat: tur/kichik_tur. Masalan, image/png: bu rasm (image), aniqrog'i PNG formatidagi rasm.

Fayl nomidagi .png qo'shimchasini eslang. Kompyuter faylning turini shu qo'shimchadan taxmin qiladi. Internetda esa fayl nomi bo'lmasligi ham mumkin. Shuning uchun server turini sarlavhada aniq aytadi.

Eng ko'p uchraydigan turlar:

MIME turi Nima Qayerda uchraydi
text/html HTML sahifa Har bir veb-sahifa
text/css CSS stil fayli Saytning dizayni
text/javascript JavaScript kod Sayt skriptlari
application/json JSON ma'lumot API javoblari
image/png, image/webp Rasmlar Logotip, surat
image/svg+xml SVG rasm Ikonkalar
application/pdf PDF hujjat Shartnoma, chek
application/octet-stream "Noma'lum baytlar" Yuklab olinadigan fayl

Yana ikkitasi formalar bilan bog'liq. application/x-www-form-urlencoded — oddiy forma yuborilganda. multipart/form-data — forma bilan birga fayl (masalan, pasport rasmi) yuborilganda. Formalarni HTML qismida batafsil ko'ramiz.

Maslahat: JavaScript uchun eski kodlarda application/javascript ham uchraydi. Masalan, jsDelivr CDN hozir ham shunday yuboradi. 2022-yildan beri rasmiy standart text/javascript, lekin brauzerlar ikkalasini ham tushunadi.

3.2 charset — matn kodlashi

Matnli turlardan keyin ko'pincha charset qo'shiladi:

http
Content-Type: text/html; charset=utf-8

Bu "matn UTF-8 da kodlangan" degani. Matn kodlash darsida ko'rganimizdek, noto'g'ri kodlashda o' o'rniga о kabi "qarg'a tuyoq" belgilar chiqadi. Shuning uchun HTML va JSON uchun charset=utf-8 qo'yish odat.

3.3 Content-Type va Accept farqi

Ikkala sarlavha ham MIME turi haqida, lekin yo'nalishi boshqa:

  • Content-Type — "men yuborayotgan narsa shu turda". Javobda ham, POST so'rovida ham keladi.
  • Accept — "men shu turlarni qabul qila olaman". Faqat so'rovda keladi.

Restoranda buyurtma berganingizni tasavvur qiling. "Menga plov yoki lag'mon bo'lsa bo'ladi" — bu Accept. Ofitsiant "Mana, plov" deb olib keladi — bu Content-Type.

http
GET /api/mahsulotlar HTTP/1.1
Host: example.com
Accept: application/json
http
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

[{"nomi":"Non","narxi":4000}]

Xuddi shu "kelishuv" boshqa sarlavhalarda ham bor:

  • Accept-Language: uz, ru — "o'zbekcha bo'lsa yaxshi, bo'lmasa ruscha". Ko'p tilli saytlar shunga qarab tilni tanlaydi.
  • Accept-Encoding: gzip, br — "siqilgan holda yuborsang ham tushunaman". Server siqsa, javobda Content-Encoding: br deb yozadi. Matn 3–5 barobar kichrayadi.

3.4 Server noto'g'ri tur aytsa nima bo'ladi?

Brauzer fayl nomiga emas, Content-Type ga ishonadi. Server rasmni text/plain deb yuborsa, brauzer uni rasm qilib chizmaydi — ekranda tushunarsiz belgilar chiqadi.

Serverlar ko'pincha yana bitta sarlavha qo'shadi:

http
X-Content-Type-Options: nosniff

"nosniff" — "hidlab ko'rma". Ya'ni: "Tarkibga qarab turni o'zing taxmin qilma, men aytgan turga qat'iy amal qil." Bu xavfsizlik uchun: hujumchi rasm nomi ostida skript yuklab qo'ya olmaydi.

Faylni ochish emas, yuklab olishga majburlash uchun esa Content-Disposition ishlatiladi:

http
Content-Disposition: attachment; filename="chek.pdf"

Tekshirib ko'ring: Brauzer serverga Accept: image/webp,image/png yubordi. Server Content-Type: image/png bilan javob berdi. Server nima qildi?

Javob

Brauzer "WebP yoki PNG qabul qila olaman" dedi. Server ikkalasidan PNG'ni tanladi va tanada PNG rasm yubordi. Accept — so'rov (istak), Content-Type — haqiqatda nima yuborilgani.

4.1 Muammo: server xotirasiz

Client–server darsida ko'rdik: server har bir so'rovni yangi, notanish odamdan kelgandek qabul qiladi. Siz login qildingiz, keyin "Savatcha" sahifasini ochdingiz. Server qanday biladi — bu o'sha login qilgan odammi?

Teatr garderobini eslang. Paltoingizni topshirasiz, sizga raqamli jeton berishadi. Garderobchi sizni eslab qolmaydi. Lekin jetonni ko'rsatsangiz — paltoingizni topib beradi.

Cookie (cookie) — xuddi shu jeton. Bu server brauzerga saqlab qo'yish uchun beradigan kichik matn: nom=qiymat. Brauzer keyingi har bir so'rovda uni o'zi qaytarib yuboradi.

text
1. Brauzer:  POST /login  (login va parol)
2. Server:   200 OK
             Set-Cookie: sessiya=a8f3k2; HttpOnly; Secure
3. Brauzer cookie'ni shu sayt uchun saqlaydi.
4. Brauzer:  GET /savatcha
             Cookie: sessiya=a8f3k2
5. Server:   "a8f3k2 — bu Malika. Mana uning savatchasi."

Ikki xil sarlavha bor, adashtirmang:

  • Set-Cookie — server javobda yuboradi: "buni saqla".
  • Cookie — brauzer so'rovda yuboradi: "mana, saqlaganim".

Cookie ichida parol emas, faqat tasodifiy "jeton" (a8f3k2) saqlanadi. Jeton kimga tegishli ekanini server o'zida yozib qo'ygan. Bunday jeton sessiya (session) deyiladi — autentifikatsiya qismida uni to'liq quramiz.

GitHub bosh sahifasi curl -I https://github.com so'roviga shunday cookie qaytardi (qisqartirilgan):

text
Set-Cookie: logged_in=no; expires=Tue, 28 Sep 2027 12:31:48 GMT;
  domain=.github.com; path=/; HttpOnly; secure; SameSite=Lax

Birinchi qism — logged_in=no — cookie'ning o'zi: nom va qiymat. Nuqtali verguldan keyingilari — atributlar. Ular brauzerga cookie bilan qanday muomala qilishni aytadi.

Atribut Nima qiladi
Expires / Max-Age Qachon o'chadi. Yo'q bo'lsa — brauzer yopilganda
Domain Qaysi domen(lar)ga yuboriladi
Path Qaysi yo'llarga yuboriladi (/ — hammasiga)
Secure Faqat HTTPS orqali yuboriladi
HttpOnly JavaScript o'qiy olmaydi
SameSite Boshqa saytdan kelgan so'rovlarda yuborilsinmi

Uchta xavfsizlik atributini batafsilroq ko'ramiz:

  • Secure — cookie shifrlanmagan http:// orqali hech qachon yuborilmaydi. Shifrlashni keyingi darsda (HTTPS va TLS) o'rganamiz.
  • HttpOnly — sahifadagi JavaScript bu cookie'ni o'qiy olmaydi. Brauzer uni faqat so'rovlarga qo'shib yuboradi. Nega bu muhim — "Hujumchi nigohi" bo'limida ko'ramiz.
  • SameSite — uch qiymati bor. Strict: faqat shu saytning o'zidan kelgan so'rovlarda yuboriladi. Lax: boshqa saytdagi havolani bosib kelganda ham yuboriladi, lekin yashirin so'rovlarda — yo'q. None: har doim (faqat Secure bilan birga). Atribut yozilmasa, Chrome uni Lax deb hisoblaydi.

Yana ikki cheklov: bitta cookie ~4 KB dan oshmaydi, va brauzer uni har bir so'rovga qo'shadi. Shuning uchun cookie'ga katta ma'lumot yozilmaydi — faqat qisqa jeton.

Tekshirib ko'ring: Set-Cookie: til=uz; Max-Age=86400 — bu cookie qancha yashaydi va JavaScript uni o'qiy oladimi?

Javob

Max-Age soniyalarda: 86 400 soniya = 24 soat (1 kun). HttpOnly yozilmagan, demak JavaScript uni o'qiy oladi. Til tanlovi uchun bu normal — u maxfiy emas. Sessiya jetoni uchun esa HttpOnly shart.

5. Kesh: faylni qayta yuklamaslik

5.1 Nega kesh kerak?

Malikaning saytida logotip 200 KB. Har bir sahifada u bor. Mijoz 10 ta sahifani ko'rsa — 2 MB faqat logotip uchun ketadi. Mobil internetda bu sekin ham, qimmat ham.

Kesh (cache) — bir marta yuklangan faylni yaqin joyda saqlab qo'yish. Keyingi safar internetdan emas, o'sha joydan olinadi. Xuddi uyda bir qop un saqlaganingizdek: har safar non yopish uchun bozorga bormaysiz.

Brauzer keshi sizning kompyuteringizda turadi. Yo'lda boshqa keshlar ham bor. Eng muhimi — CDN: dunyoning ko'p shaharlarida fayllar nusxasini saqlab turadigan serverlar tarmog'i. Uni to'liq sayohat darsida batafsil ko'ramiz.

5.2 Cache-Control — keshlash qoidasi

Server javobida Cache-Control sarlavhasi bilan "bu faylni qancha saqlash mumkin" deydi. Qiymatlari direktiva deyiladi:

Direktiva Ma'nosi
max-age=3600 3600 soniya (1 soat) so'ramasdan ishlatish mumkin
no-cache Saqla, lekin har safar serverdan "o'zgarganmi?" deb so'ra
no-store Umuman saqlama (bank sahifalari)
private Faqat brauzer saqlasin, oraliq keshlar emas
public Oraliq keshlar (CDN) ham saqlashi mumkin
immutable Fayl hech qachon o'zgarmaydi, tekshirish shart emas

Diqqat: no-cache nomi aldaydi. U "keshlama" degani emas — "ishlatishdan oldin tekshir" degani. "Umuman saqlama" — bu no-store.

jsDelivr CDN'dagi JavaScript kutubxona fayli (curl -I natijasi, qisqartirilgan):

text
HTTP/1.1 200 OK
Content-Type: application/javascript; charset=utf-8
Content-Length: 7160
Cache-Control: public, max-age=31536000, immutable
ETag: W/"1bf8-ailNY4aqrCR1iwkSkw1leTi0218"
Age: 1175977

max-age=31536000 — 31 536 000 soniya, ya'ni 1 yil. immutable — "bu fayl o'zgarmaydi". Age: 1175977 — fayl CDN keshida 13 kundan ortiq turibdi.

Bir yil saqlasa, yangilanish qanday yetib boradi? Hiyla shunda: fayl manzilida versiya bor — dayjs@1.11.13. Yangi versiya chiqsa, manzil ham o'zgaradi (@1.11.14). Brauzer uchun bu butunlay yangi fayl. Saytlar shuning uchun fayllarni app.3f9a2c.js kabi nomlaydi — bu kesh buzish (cache busting) deyiladi.

5.3 ETag va 304 Not Modified

no-cache bo'lsa, brauzer har safar "o'zgarganmi?" deb so'raydi. Lekin butun faylni qayta yuklamasdan qanday so'raydi?

Server javobga ETag qo'shadi — fayl versiyasining "barmoq izi". Fayl o'zgarsa, ETag ham o'zgaradi. Brauzer keyingi safar shu izni If-None-Match sarlavhasida yuboradi: "Menda shu versiya bor. O'zgargan bo'lsa, yangisini ber."

Buni terminalda o'zingiz sinab ko'rasiz. -H bayrog'i so'rovga o'zimiz xohlagan sarlavhani qo'shadi:

bash
curl -I -H 'If-None-Match: W/"1bf8-ailNY4aqrCR1iwkSkw1leTi0218"' \
  https://cdn.jsdelivr.net/npm/dayjs@1.11.13/dayjs.min.js

Qator oxiridagi \ — "buyruq keyingi qatorda davom etadi" degani.

Natija:

text
HTTP/1.1 304 Not Modified
ETag: W/"1bf8-ailNY4aqrCR1iwkSkw1leTi0218"

304 Not Modified — status kodlari darsidan tanish. "Fayl o'zgarmagan, keshdagisini ishlating." Javobda tana yo'q — 7 KB o'rniga bir necha yuz bayt keldi.

ETag oldidagi W/ — "weak" (kuchsiz): "ma'nosi bir xil" degani. Buni bilish shart emas, faqat chiqishda ko'rsangiz hayron bo'lmang.

ETag'ga o'xshash eski usul ham bor: server Last-Modified (oxirgi o'zgarish vaqti) yuboradi, brauzer If-Modified-Since bilan so'raydi. Yuqoridagi example.com javobida last-modified aynan shu.

Tekshirib ko'ring: Saytning bosh sahifasi (HTML) uchun Cache-Control: max-age=31536000 qo'ysak nima bo'ladi?

Javob

Brauzer bosh sahifani bir yil davomida serverdan so'ramaydi. Siz saytni yangilasangiz ham, eski mijozlar eski sahifani ko'rib yuraveradi. Shuning uchun HTML odatda no-cache bilan beriladi. Uzoq max-age esa nomida versiyasi bor CSS, JS va rasmlarga qo'yiladi.

6. Yana uchta foydali sarlavha

Location — 3xx yo'naltirishlar bilan birga keladi: "boshqa manzilga o't". curl -I http://google.com natijasi:

text
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/

Brauzer Location dagi manzilni o'zi ochadi. Siz buni sezmaysiz ham.

User-Agent — so'rov yuborgan dastur o'zini tanishtiradi. curl o'zini User-Agent: curl/8.19.0 kabi ataydi (raqam — o'rnatilgan versiya: Git Bash'dagi va Windows'dagi curl'da har xil bo'lishi mumkin). Chrome esa uzun satr yuboradi: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... Chrome/.... Server shunga qarab statistika yig'adi. Lekin unga ishonib bo'lmaydi — istalgan dastur o'zini istalgan nom bilan atay oladi.

Content-Length — tana hajmi baytlarda. Yuklab olishdagi "qancha qoldi" chizig'i shu raqamdan hisoblanadi.

7. Hujumchi nigohi

Cookie — sayt sizni taniydigan jeton. Kim jetonni qo'lga kiritsa, sayt uni siz deb o'ylaydi. Shuning uchun hujumchilar aynan cookie'ni ovlaydi. Uch xil yo'l bor.

1. Ochiq Wi-Fi'da tinglash. Choyxonadagi ochiq Wi-Fi'da hujumchi tarmoqdagi paketlarni o'qiydi. Sayt http:// bo'lsa, Cookie: sessiya=a8f3k2 ochiq matn bo'lib uchadi. Hujumchi uni o'z brauzeriga qo'yadi va sizning akkauntingizga kiradi. Himoya: sayt faqat HTTPS'da ishlaydi, cookie esa Secure bilan beriladi.

2. Sahifaga zararli skript kiritish (XSS). Hujumchi saytdagi izoh maydoniga skript yozib qoldiradi. Sayt uni tekshirmasa, skript boshqa mijozlar brauzerida ishga tushadi. U document.cookie bilan cookie'larni o'qib, hujumchiga yuboradi. XSS'ni DOM xavfsizligi darsida chuqur o'rganamiz. Himoya: sessiya cookie'si HttpOnly bo'lsa, skript uni umuman ko'rmaydi.

3. Begona saytdan so'rov (CSRF). Siz bankka kirgansiz. Boshqa tabda zararli sayt ochiladi va yashirincha bankka "pul o'tkaz" so'rovini yuboradi. Brauzer bank cookie'sini avtomatik qo'shib yuborsa — bank so'rovni sizniki deb o'ylaydi. Himoya: SameSite=Lax yoki Strict — brauzer begona saytdan kelgan bunday so'rovga cookie qo'shmaydi.

Shuning uchun sessiya cookie'si uchun oltin qoida:

http
Set-Cookie: sessiya=a8f3k2; HttpOnly; Secure; SameSite=Lax; Path=/

8. Ko'p uchraydigan xatolar

8.1 CSS ulanmadi: "MIME type ('text/html')"

Sahifa dizaynsiz ochildi. Brauzer konsolida (F12 → Console) shunday qizil yozuv:

text
Refused to apply style from 'http://localhost:5500/css/stil.css'
because its MIME type ('text/html') is not a supported stylesheet
MIME type, and strict MIME checking is enabled.

Tarjimasi: "stil.css ni qo'llashni rad etdim, chunki uning MIME turi text/html — bu stil fayli turi emas."

G'alati, to'g'rimi? Siz CSS so'radingiz, server HTML qaytardi. Sababi ko'pincha oddiy: fayl yo'li noto'g'ri. Server faylni topmadi va "404 — sahifa topilmadi" degan HTML sahifani yubordi. Brauzer uni Content-Type ga qarab rad etdi. Tuzatish: xato matnidagi manzilni brauzerda alohida oching. 404 chiqsa — yo'lni tuzating (nisbiy va absolyut yo'llar).

8.2 "Saytni yangiladim, lekin o'zgarish ko'rinmayapti"

Brauzer eski CSS yoki JS'ni keshdan olyapti. Tuzatish: Ctrl + Shift + R — keshni chetlab qayta yuklash. Doimiy yechim — fayl nomida versiya (stil.v2.css) yoki HTML uchun no-cache.

Sayt ishlayveradi, xato chiqmaydi — shuning uchun sezilmaydi. Lekin bitta XSS teshigi bo'lsa, hamma mijozlarning sessiyasi o'g'irlanadi. Tuzatish: login bilan bog'liq har bir cookie'ga HttpOnly; Secure; SameSite.

8.4 JSON yuborib, Content-Type ni unutish

Serverga {"ism":"Ali"} yubordingiz, lekin Content-Type: application/json qo'ymadingiz. Server tanani JSON deb tanimaydi va bo'sh ma'lumot oldi deb hisoblaydi. Tuzatish: tana yuborganda uning turini doim ayting. fetch bilan buni ma'lumot yuborish darsida qilamiz.

Set-Cookie: parol=12345 — hech qachon. Cookie brauzerda ochiq saqlanadi, uni foydalanuvchi ham, kompyuterdagi boshqa dasturlar ham ko'ra oladi. Cookie'da faqat ma'nosiz jeton bo'lsin.

9. Mashqlar

1-mashq (oson): Sarlavhalarni o'qish

Terminalda bajaring (PowerShell'da curl.exe):

bash
curl -I https://example.com

Chiqishdan toping: Content-Type qiymati, Server qiymati va Age qiymati. Age ni soatga aylantiring.

Bo'sh joylarni to'ldiring: HTML sahifaning MIME turi — [:text/html]. JSON ma'lumotning MIME turi — [:application/json].

Yechim

Bizda Content-Type: text/html, Server: cloudflare, Age: 11992 chiqdi. Sizda Age boshqacha bo'ladi — u kesh yangilanganidan beri o'tgan vaqt. Soatga aylantirish: 11 992 ÷ 3600 ≈ 3,3 soat.

Age umuman chiqmasligi ham mumkin. Bu javob keshdan emas, to'g'ridan-to'g'ri asosiy serverdan kelgan degani.

Server shunday javob berdi:

http
Set-Cookie: savatcha=7k2p; Max-Age=3600; Secure; SameSite=Strict
  1. Cookie'ning nomi va qiymati nima?
  2. U qancha vaqt yashaydi?
  3. http:// sahifada brauzer uni yuboradimi?
  4. JavaScript uni o'qiy oladimi? Bu savatcha uchun xavflimi?
Yechim
  1. Nomi savatcha, qiymati 7k2p.
  2. Max-Age=3600 — 3600 soniya, ya'ni 1 soat.
  3. Yo'q. Secure bor — faqat HTTPS orqali yuboriladi.
  4. Ha, o'qiy oladi — HttpOnly yo'q. Agar bu jeton bilan savatchani o'zgartirish yoki to'lov qilish mumkin bo'lsa, HttpOnly qo'shish kerak. Aks holda XSS orqali jeton o'g'irlanishi mumkin.

3-mashq (qiyin): 304 ni o'zingiz oling

Maqsad: ETag orqali 304 Not Modified javobini olish. Sarlavhani ajratib olish uchun grep va pipe ishlatamiz. Git Bash'da:

  1. Fayl sarlavhalaridan faqat ETag qatorini chiqaring:
bash
curl -sI https://cdn.jsdelivr.net/npm/dayjs@1.11.13/dayjs.min.js \
  | grep -i etag

-s — "jim rejim": curl yuklash jarayonini ko'rsatmaydi. grep -i — katta-kichik harfga qaramay qidiradi.

  1. Chiqqan qiymatni If-None-Match sarlavhasiga qo'yib, so'rovni qayta yuboring.
  2. Status kodi nima bo'ldi? Nega javobda Content-Length yo'q?
Yechim

1-qadam natijasi:

text
ETag: W/"1bf8-ailNY4aqrCR1iwkSkw1leTi0218"

2-qadam:

bash
curl -sI -H 'If-None-Match: W/"1bf8-ailNY4aqrCR1iwkSkw1leTi0218"' \
  https://cdn.jsdelivr.net/npm/dayjs@1.11.13/dayjs.min.js

Natija:

text
HTTP/1.1 304 Not Modified
ETag: W/"1bf8-ailNY4aqrCR1iwkSkw1leTi0218"
  1. Status — 304. Server "sizdagi versiya hali yangi" dedi va tanani yubormadi. Tana yo'q — hajmini aytishga ham hojat yo'q. Brauzer ham xuddi shunday qiladi: F12 → Network panelida 304 qatorlarni ko'rsangiz, fayl keshdan olingan.

Agar sizda ETag boshqacha chiqsa — CDN faylni qayta joylagan. O'zingizda chiqqan qiymatni ishlating.

10. Real ishda

  • Frontend: CSS ulanmay qolganda birinchi qadam — DevTools'da Content-Type va status kodini ko'rish. DevTools Network darsida buni har kuni qilasiz.
  • Backend: Express yoki NestJS'da javob yuborish — asosan status kodi, sarlavhalar va tanani to'g'ri qo'yish. Login tizimi cookie atributlarisiz yozilmaydi.
  • Tezlik: Katta saytlarda to'g'ri Cache-Control sahifa yuklanishini bir necha barobar tezlashtiradi va server xarajatini kamaytiradi.
  • Intervyu: "no-cache va no-store farqi?", "HttpOnly nimadan himoya qiladi?", "304 qachon qaytadi?" — frontend va backend intervyularida tez-tez so'raladi.

Xulosa

  • Sarlavha — HTTP xabaridagi Nom: qiymat yorlig'i; nomida katta-kichik harf farq qilmaydi.
  • Content-Type — "nima yubordim" (MIME turi), Accept — "nimani qabul qila olaman".
  • Cookie — server bergan jeton: Set-Cookie bilan beriladi, Cookie bilan qaytadi.
  • Sessiya cookie'si uchun: HttpOnly; Secure; SameSite=Lax.
  • Cache-Control keshlash qoidasini beradi; no-cache — "tekshir", no-store — "saqlama".
  • ETag + If-None-Match → 304 Not Modified: fayl qayta yuklanmaydi.

Keyingi dars: HTTPS va TLS — sarlavhalar va cookie'lar yo'lda ochiq matn bo'lib uchmasligi uchun ularni qanday shifrlashni o'rganamiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
HTTP sarlavhalari: MIME turlari, cookie va kesh — IlmHamroh