Kuchli javoblar html. Aqldan ozgan shakllar. Elektron pochta manzillari

Saytlararo skriptga qarshi hujumlar

Saytlararo skript (XSS) hujumida tajovuzkor qonuniy veb-sahifaga zararli kodni kiritadi, keyin esa mijoz tomonida zararli skriptni ishga tushiradi. Foydalanuvchi zararlangan sahifaga tashrif buyurganida, skript foydalanuvchining brauzeriga yuklab olinadi va u yerda bajariladi. Ushbu sxema ko'p navlarga ega. Zararli skript brauzer cookie-fayllariga, seans tokenlariga yoki brauzerda saqlangan boshqa maxfiy ma'lumotlarga kirishi mumkin. Biroq, barcha hujumlar 1-rasmda ko'rsatilgan sxema bo'yicha ishlaydi.

1-rasm. 1-rasm. Odatdagi XSS hujumi
XSS zaifliklari

Oddiy XSS hujumida tajovuzkor serverning veb-sahifasiga string kiritish usulini topadi. Aytaylik, tajovuzkor veb-sahifaga quyidagi qatorni kiritdi: alert("siz hujum ostidasiz") . Har safar foydalanuvchi ushbu sahifaga tashrif buyurganida, uning brauzeri ushbu skriptni yuklab oladi va uni sahifaning qolgan tarkibi bilan birga ishga tushiradi. Bunday holda, skriptni ishga tushirish natijasida foydalanuvchi "siz hujum ostidasiz" matni bilan qalqib chiquvchi oynani ko'radi.

XSS oqibatlari

Agar tajovuzkor veb-ilovadagi XSS zaifligidan foydalana olgan bo'lsa, u sahifaga ma'lumotlarga kirishni ta'minlaydigan skriptni kiritishi mumkin edi. hisob foydalanuvchi. Bunday holda, tajovuzkor ko'plab zararli harakatlarni amalga oshirishi mumkin, masalan:

  • hisobni o'g'irlash;
  • tarqaladigan viruslar;
  • ko'rish tarixi va clipboard tarkibiga kirish;
  • Imkoniyatga ega bo'ling masofaviy boshqarish brauzer;
  • ichki tarmoqdagi apparat va dasturiy ta'minot resurslari va ilovalarini skanerlash va ulardan foydalanish.
XSS hujumlarining oldini olish

XSS hujumlarining oldini olish uchun dastur oxirgi foydalanuvchiga yetkazishdan oldin sahifa chiqishini shifrlashi kerak. Chiqish ma'lumotlarini shifrlashda HTML belgilash muqobil vakillik bilan almashtirilgan - ob'ektlar. Brauzer ushbu ob'ektlarni ko'rsatadi, lekin ularni ishga tushirmaydi. Masalan, ga aylantirildi.

1-jadvalda ba'zi umumiy HTML belgilar uchun ob'ekt nomlari ko'rsatilgan.

1-jadval. HTML belgilar uchun obyekt nomlari Natija tavsifi Obyekt nomi Obyekt raqami
Buzilmaydigan bo'shliq
< Dan kichik; .. dan kamroq<
> Bundan ko'proq> >
& Ampersand& &
¢ sent¢ ¢
£ Funt£ £
¥ Jena¥ ¥
evro
§ Paragraf§ §
© Mualliflik huquqi ©
® ® ®
Savdo belgisi

Brauzer ob'ektlarga duch kelganda, ular yana HTMLga aylantiriladi va chop etiladi, lekin ular o'chirilmaydi. Misol uchun, agar tajovuzkor serverning veb-sahifasidagi o'zgaruvchilar maydoniga string alert("siz hujum ostidasiz") ni kiritsa, u holda tavsiflangan strategiyadan foydalanganda server string alert("siz hujum ostidasiz") ni qaytaradi. .

Brauzer shifrlangan skriptni yuklaganda, uni alert("siz hujum ostidasiz") ga aylantiradi va skriptni veb-sahifaning bir qismi sifatida ko'rsatadi, lekin uni ishga tushirmaydi.

Server tomonidagi Java ilovasiga HTML kodini qo'shish

Zararli skript kodining sahifa bilan birga ko'rsatilishini oldini olish uchun ilovangiz sahifada ko'rsatilishidan oldin barcha string o'zgaruvchilarni shifrlashi kerak. Shifrlash quyidagilardan iborat oddiy transformatsiya da ko'rsatilganidek, har bir belgi tegishli HTML ob'ekt nomiga Java kodi 1-ro'yxatda ko'rsatilgan.

Listing 1. Belgilarni HTML obyekt nomlariga aylantirish EscapeUtils umumiy toifasi ( umumiy statik yakuniy HashMap m = new HashMap(); statik ( m.put(34, """); //< - меньше чем m.put(60, ""); // >- kattaroq //Foydalanuvchi hammasiga mos kelishi kerak html ob'ektlari mos keladigan kasr qiymatlari bilan. //O'nlik kasr qiymatlariga ob'ektni solishtirish quyidagi jadvalda ko'rsatilgan) umumiy statik String escapeHtml() ( String str = "alert(\"abc\")"; urinib ko'ring ( StringWriter writer = new StringWriter((int) (str) .length() * 1.5)); escape(yozuvchi, str); System.out.println("kodlangan string" + writer.toString()); writer.toString(); ) catch (IOException ioe) (ioe) .printStackTrace() ; return null; ) ) umumiy statik boʻshliqdan qochish (Yozuvchi yozuvchi, String str) IOExceptionni tashlaydi ( int len ​​= str.length(); (int i = 0; i) uchun< len; i++) { char c = str.charAt(i); int ascii = (int) c; String entityName = (String) m.get(ascii); if (entityName == null) { if (c >0x7F) ( writer.write(""); writer.write(Integer.toString(c, 10)); writer.write(";"); ) else ( writer.write(c); ) ) else ( writer. yozing(entityName); ) ) ) )

Listing 1dagi Java kodi "alert(\"abc\)" HTML satrini kodlaydi. Quyidagi protseduradan foydalaning:

Natijada, chiqishda quyidagi qator paydo bo'ladi: alert("abc") .

2-jadvalda HTML ob'ektlarini ularning o'nlik qiymatlari bilan taqqoslash ko'rsatilgan.

2-jadval. HTML ob'ektining o'nlik qiymatlari O'nlik qiymat Ob'ekt tavsifi
160 Buzilmaydigan bo'shliq
60 < Dan kichik; .. dan kamroq
62 > Bundan ko'proq
38 & Ampersand
162 ¢ sent
163 £ Funt
165 ¥ Jena
8364 evro
167 § Paragraf
169 Mualliflik huquqi
174 ® Ro'yxatdan o'tgan tovar belgisi
8482 Savdo belgisi
Xulosa

Saytlararo skriptni kiritish foydalanuvchi kompyuteriga hujum qilishning eng keng tarqalgan usullaridan biridir. Biroq, siz tajovuzkorning veb-ilovangizni zararli kod bilan zararlash qobiliyatini sezilarli darajada kamaytirishingiz mumkin. Ilovangizni yaratishda, oxirgi foydalanuvchi brauzeriga yuborishdan oldin barcha sahifa chiqish qiymatlarini shifrlashga ehtiyot bo'ling.

Tekshiruvchilardan javob yaratish

Tekshirish moslamasi so'rovni qayta ishlashni tugatgandan so'ng, odatda javobni yaratishi kerak. IController interfeysini to'g'ridan-to'g'ri amalga oshirish orqali past darajadagi kontroller yaratganimizda, biz so'rovni qayta ishlashning har bir jihati, jumladan, mijozga javob yaratish uchun javobgarlikni olishimiz kerak.

Misol uchun, HTML-javobni yuborish uchun HTML ma'lumotlarini yaratish va tuzish va keyin Response.Write() usuli yordamida mijozga yuborish kerak bo'ladi. Xuddi shunday, foydalanuvchi brauzerini boshqa URL manziliga yo‘naltirish uchun Response.Redirect() usulini chaqirish va unga kerakli URL manzilini yuborish kerak bo‘ladi. Ikkala yondashuv ham quyidagi kodda ko'rsatilgan bo'lib, biz avvalgi maqolada IController interfeysini amalga oshirish orqali yaratgan BasicController sinfining kengaytmalarini ko'rsatadi:

System.Web.Mvc dan foydalanish; System.Web.Routing-dan foydalanish; Namespace ControllersAndActions.Controllers ( umumiy sinf BasicController: IController ( public void Execute(RequestContext requestContext) ( string controller = (string)requestContext.RouteData.Values["controller"]; string action = (string)requestContext[RouteDataValuction. "]; agar (action.ToLower() == "redirect") ( requestContext.HttpContext.Response.Redirect("/Derived/Index"); ) else ( requestContext.HttpContext.Response.Write(string.Format("Controller) : (0), Harakat usuli: (1)", boshqaruvchi, harakat)); ) ) ) )

Xuddi shu yondashuv Controller sinfidan kontrollerni meros qilib olishda ham qo'llanilishi mumkin. Execute() usulida requestContext.HttpContext.Response xossasi o‘qilganida qaytariladigan HttpResponseBase klassiga quyida keltirilgan misolda ko‘rsatilganidek, Controller.Response xususiyati orqali kirish mumkin, u DerivedController sinfini kengaytiradi, bundan oldin ham yaratgan. Controller sinfidan meros:

Tizimdan foydalanish; System.Web-dan foydalanish; System.Web.Mvc yordamida; namespace ControllersAndActions.Controller ( umumiy sinf DerivedController: Controller ( public ActionResult Index() ( // ... ) public void ProduceOutput() ( if (Server.MachineName == "ProfessorWeb") Response.Redirect("/Basic/Index" ); else Response.Write("Controller: Derived, Action Method: ProduceOutput"); ) ) )

ProduceOutput() usuli mijozga qanday javob yuborishni hal qilish uchun Server.MachineName xususiyati qiymatidan foydalanadi. ("ProfessorWeb" mening ishlab chiqish mashinamning nomi.)

Garchi foydalanuvchiga javob yaratishning ushbu yondashuvi ishlayotgan bo'lsa-da, u bilan bir qator muammolar mavjud:

    Controller sinflari haqida ma'lumot bo'lishi kerak HTML tuzilishi yoki URL, bu sinflarni o'qish va saqlashni qiyinlashtiradi.

    To'g'ridan-to'g'ri chiqishga javob beradigan kontrollerni birlik sinovidan o'tkazish qiyin. Siz Response ob'ektining soxta ilovalarini yaratishingiz kerak va keyin uning nima ekanligini aniqlash uchun boshqaruvchidan chiqishni qayta ishlashingiz kerak bo'ladi. Bu, masalan, HTML belgilarini tahlil qilish zarurligini anglatishi mumkin kalit so'zlar, bu uzoq va zerikarli jarayon.

    Har bir javobning kichik tafsilotlarini shu tarzda qayta ishlash murakkab va xatolarga moyil. Ba'zi dasturchilar past darajadagi kontrollerni qurish orqali ta'minlangan mutlaq boshqaruvni yoqtirishadi, lekin bu odatda juda tez murakkablashadi.

Yaxshiyamki, MVC Framework ushbu muammolarning barchasini - harakatlar natijalarini hal qiladigan qulay vositaga ega. Keyingi bo'limlarda harakat natijalari tushunchasi tushuntiriladi va ko'rsatiladi turli yo'llar bilan boshqaruvchilardan javoblarni ishlab chiqarish uchun foydalanish.

Harakatlar natijalari

MVC Framework-dagi harakatlar natijalari niyat bayonotlarini niyatni amalga oshirishdan ajratish uchun ishlatiladi (tavtologiya uchun uzr). Kontseptsiyani o'zlashtirganingizdan so'ng oddiy ko'rinadi, ammo ba'zi bilvositalik tufayli tushunish uchun biroz vaqt kerak bo'ladi.

To'g'ridan-to'g'ri Response ob'ekti bilan ishlash o'rniga, harakat usullari nazoratchi javobi qanday bo'lishi kerakligini tavsiflovchi ActionResult-dan olingan sinf ob'ektini qaytaradi, masalan, ko'rinishni ko'rsatish yoki boshqa URL yoki harakat usuliga yo'naltirish. Biroq (bu juda bilvosita) javob to'g'ridan-to'g'ri ishlab chiqilmaydi. Buning o'rniga, MVC Framework harakat usuli chaqirilgandan keyin natijani ishlab chiqarish uchun ishlov beradigan ActionResult ob'ekti yaratiladi.

Harakat natijalari tizimi Buyruqning dizayn namunasiga misoldir. Ushbu naqsh bajarilayotgan operatsiyalarni tavsiflovchi ob'ektlarni saqlaydigan va uzatadigan stsenariylarni ifodalaydi.

MVC Framework harakat usulidan ActionResult obyektini qabul qilganda, u chaqiradi ExecuteResult() usuli, ushbu ob'ekt sinfida belgilangan. Keyin harakat natijalarini amalga oshirish Response ob'ektida ishlaydi va sizning maqsadingizga mos keladigan natijani yaratadi. Buni amalda ko‘rsatish uchun keling, Infratuzilma papkasini yaratamiz va unga CustomRedirectResult.cs deb nomlangan yangi sinf faylini quyidagi misolda ko‘rsatilgan maxsus ActionResult ilovasi bilan qo‘shamiz:

System.Web.Mvc dan foydalanish; namespace ControllersAndActions.Infrastructure ( umumiy sinf CustomRedirectResult: ActionResult ( umumiy Url ( get; set; ) umumiy bekor qilish bekor ExecuteResult(ControllerContext context) ( string fullUrl = UrlHelper.GenerateContentUrl = UrlHelper.GenerateContentUrl(UrlHelper.GenerateContentUrl(UrlHelper.Generate. bevosita (fullUrl); )))

Bu sinf System.Web.Mvc.RedirectResult sinfining ishlash usuliga asoslangan. Ochiq kodli MVC Framework ning afzalliklaridan biri bu har qanday narsaning ichki ishini o'rganish qobiliyatidir. CustomRedirectResult klassi MVC ekvivalentiga qaraganda ancha sodda, ammo ushbu maqola maqsadlari uchun etarli.

RedirectResult sinfini yaratishda biz foydalanuvchi qayta yo'naltirilishi kerak bo'lgan URL manziliga o'tamiz. Harakat usuli tugagach, MVC Framework tomonidan bajariladigan ExecuteResult() usuli qabul qilinadi. Javob ob'ekti Framework tomonidan taqdim etilgan ControllerContext ob'ekti orqali so'rov yuborish va RedirectPermanent() usuli yoki Redirect() usulini chaqiradi (bu maqolaning oldingi misolida past darajadagi IController ilovasida bajarilgan ishlarni aynan aks ettiradi).

CustomRedirectResult sinfidan foydalanish quyidagi misolda tasvirlangan, unda Derived kontrollerga kiritilgan o'zgarishlar ko'rsatilgan:

// ... ControllersAndActions.Infrastructure yordamida; namespace ControllersAndActions.Controllers ( umumiy sinf DerivedController: Controller ( public ActionResult Index() ( // ... ) public ActionResult ProduceOutput() ( if (Server.MachineName == "MyMachineName") yangi CustomRedirectResult/UrsBa "(Url/) qaytaradi Index" ); else ( Response.Write("Controller: Derived, Action Method: ProduceOutput"); return null; ) ) ) )

E'tibor bering, biz ActionResult-ni qaytarish uchun harakat usuli natijasini o'zgartirishga majbur bo'ldik. Agar biz MVC Framework bizning amallar usulimiz bajarilganda hech narsa qilishini istamasak, null qiymatini qaytaramiz, agar CustomRedirectResult misoli qaytarilmagan bo'lsa, shunday qildik.

Birliklarni sinovdan o'tkazish kontrollerlari va harakatlar

MVC Frameworkning ko'p qismlari birlik sinovini osonlashtirish uchun mo'ljallangan va bu, ayniqsa, harakatlar va kontrollerlar uchun to'g'ri keladi. Ushbu qo'llab-quvvatlashning bir nechta sabablari bor:

Harakatlar va kontrollerlarni veb-serverdan tashqarida sinab ko'rishingiz mumkin. Kontekst ob'yektlariga ularning tayanch sinflari (masalan, HttpRequestBase) orqali kirish mumkin, ularni masxara qilish oson.

Harakat usuli natijalarini sinab ko'rish uchun HTML belgilarini tahlil qilishingiz shart emas. Kutilgan natijalarni olishingizga ishonch hosil qilish uchun qaytarilgan ActionResult obyektini tekshirishingiz mumkin.

Mijoz so'rovlarini taqlid qilish kerak emas. MVC Framework ning modelni bog'lash tizimi o'z parametrlarida kiritilgan ma'lumotlarni oladigan harakat usullarini yozish imkonini beradi. Harakat usulini sinab ko'rish uchun siz uni to'g'ridan-to'g'ri chaqirasiz va tegishli parametr qiymatlarini taqdim etasiz.

Nazoratchilardan ma'lumotlarni yaratish bo'yicha kelgusi maqolalar sizga har xil turdagi harakatlar natijalari uchun birlik testlarini qanday yaratishni ko'rsatib beradi.

Shuni unutmangki, birlik sinovi rasmning faqat bir qismidir. Ilovadagi murakkab xatti-harakatlar harakatlar usullari ketma-ket chaqirilganda yuzaga keladi. Birlik testi boshqa test yondashuvlari bilan birlashganda yaxshi ishlaydi.

Endi siz qayta yo'naltirish harakatining maxsus natijasi qanday ishlashini bilganingizdan so'ng, MVC ramkasi tomonidan taklif qilingan uning ekvivalentiga o'tishingiz mumkin, bu yanada kuchliroq va Microsoft tomonidan sinchkovlik bilan sinovdan o'tgan. Derived controllerga kerakli o'zgartirish quyida keltirilgan:

// ... ommaviy ActionResult ProduceOutput() ( yangi RedirectResult("/Basic/Index")ni qaytaring; ) // ...

Shartli bayonot amal usulidan olib tashlandi, ya'ni ilovani ishga tushirgandan va /Derived/ProduceOutput kabi URL manziliga o'tgandan so'ng, brauzer /Basic/Index kabi URL manziliga yo'naltiriladi. Harakat usuli kodini soddalashtirish uchun Controller sinfi har xil turdagi ActionResult obyektlarini yaratish uchun qulay usullarni o'z ichiga oladi. Shunday qilib, masalan, Redirect() usuli natijasini qaytarish orqali yuqoridagi misoldagi kabi effektga erishishimiz mumkin:

// ... ommaviy ActionResult ProduceOutput() ( Redirect("/Basic/Index"); ) // ...

Harakat natijalari tizimida ayniqsa murakkab narsa yo‘q, lekin u oxir-oqibatda o‘qish oson, toza va izchil kod ishlab chiqarishga yordam beradi va birlik sinovi. Misol uchun, qayta yo'naltirish holatida, amal usuli Url xususiyati kutilgan maqsadni o'z ichiga olgan RedirectResult misolini qaytarishini tekshirishingiz mumkin.

MVC Framework quyidagi jadvalda tavsiflangan ko'plab o'rnatilgan harakat natijalari turlarini belgilaydi:

O'rnatilgan ActionResult turlari Turi Tavsif Controller sinfining yordamchi usullari
Natijani ko'rish

Belgilangan yoki standart ko'rinish shablonini ko'rsatadi

Ko'rinish()
PartialViewResult

Belgilangan yoki standart qisman ko'rinish shablonini ko'rsatadi

PartialView()
RedirectToRouteResult

Muammolar HTTP qayta yo'naltirish 301 yoki 302 - harakat usuli yoki belgilangan marshrut yozuvi, marshrutlash konfiguratsiyasiga muvofiq URL manzilini yaratish

RedirectToAction()
RedirectToActionPermanent()
RedirectToRoute()
RedirectToRoutePermanent()
RedirectResult

Berilgan URL manziliga HTTP 301 yoki 302 yoʻnaltirishni chiqaradi

Qayta yo'naltirish()
RedirectPermanent()
ContentResult

Brauzerga formatlanmagan matn ma'lumotlarini qaytaradi, qo'shimcha ravishda kontent turi sarlavhasini o'rnatadi

Kontent()
FileResult

Ikkilik ma'lumotlarni (masalan, diskdagi fayl yoki xotiradagi bayt massivi) to'g'ridan-to'g'ri brauzerga uzatadi

Fayl()
JsonResult

.NET obyektini ketma-ketlashtiradi JSON formati va uni javob sifatida yuboradi. Ushbu turdagi javoblar ko'proq Web API va AJAX vositalaridan foydalanganda hosil bo'ladi

Json()
JavaScriptResult

Fragman yuboradi manba kodi Brauzer tomonidan bajarilishi kerak bo'lgan JavaScript

JavaScript()
HttpUnauthorizedResult

HTTP javob holati kodini 401 ("ruxsat berilmagan" degan ma'noni anglatadi) ga o'rnatadi, bu esa tashrif buyuruvchini tizimga kirishga taklif qilish uchun autentifikatsiya mexanizmini (shakllarni autentifikatsiya qilish yoki Windows autentifikatsiyasini) keltirib chiqaradi.

Yo'q
HttpNotFoundResult

Qaytadi HTTP xatosi 404 kodi bilan - topilmadi (topilmadi)

HttpNotFound()
HttpStatusCodeResult

Belgilangan HTTP kodini qaytaradi

Yo'q
EmptyResult

Hech narsa qilmaslik

Yo'q

Bu turlarning barchasi ActionResult sinfidan kelib chiqadi va ularning ko'pchiligi Controller sinfida qulay yordamchi usullarga ega. Ushbu turdagi natijalardan foydalanishni keyingi maqolalarda ko'rsatamiz.

So'rov xabarini qabul qilgandan va sharhlagandan so'ng, server HTTP javob xabari bilan javob beradi:

  • Status qatori
  • Nol yoki undan ortiq sarlavha (Umumiy|Javob|Shakh) maydonlari va keyin CRLF
  • Sarlavha maydonlarining oxirini ko'rsatadigan bo'sh satr (ya'ni, CRLF oldidan hech narsa bo'lmagan chiziq)
  • Ixtiyoriy ravishda xabarning asosiy qismi
  • Quyidagi bo'limlarning har biri HTTP javob xabarida ishlatiladigan ob'ektlarni tushuntiradi.

    Xabar holati-liniyasi

    Status-Line protokol versiyasidan, undan keyin raqamli holat kodi va unga bog'liq matnli iboradan iborat. Elementlar bo'sh joy SP belgilari bilan ajratilgan.

Status-Line = HTTP-versiyasi SP Status-kodi SP sababi-iborasi CRLF HTTP versiyasi

HTTP 1.1 versiyasini qo'llab-quvvatlaydigan server quyidagi versiya ma'lumotlarini qaytaradi:

HTTP-versiyasi = HTTP/1.1

Status kodi

Status-kod elementi 3 xonali butun son bo'lib, unda Status-kodning birinchi raqami javob sinfini belgilaydi va oxirgi ikki raqam hech qanday toifalash roliga ega emas. Birinchi raqam uchun 5 ta qiymat mavjud:

S.N. Kod va tavsif
1 1xx: Axborot

Bu so'rov qabul qilinganligini va jarayon davom etayotganini anglatadi.

2 2xx: Muvaffaqiyat

Bu harakat muvaffaqiyatli qabul qilingan, tushunilgan va qabul qilinganligini anglatadi.

3 3xx: Qayta yo'naltirish

Bu so'rovni bajarish uchun qo'shimcha choralar ko'rish kerakligini anglatadi.

4 4xx: mijoz xatosi

Bu so'rovda noto'g'ri sintaksis mavjudligi yoki bajarilmasligini bildiradi.

5 5xx: Server xatosi

Bu server haqiqiy so'rovni bajara olmaganligini anglatadi.

HTTP holat kodlari kengaytirilishi mumkin va barcha ro'yxatdan o'tgan holat kodlarining ma'nosini tushunish uchun HTTP ilovalari talab qilinmaydi. Barcha holat kodlari ro'yxati alohida bobda berilgan sizning uchun ma'lumotnoma.

Javob sarlavhalari maydonlari

HTTP sarlavha maydonlarini o'rganganimizda, biz umumiy sarlavha va ob'ekt sarlavhasini alohida bobda o'rganamiz. Hozircha, javob sarlavhalari maydonlari nima ekanligini tekshirib ko'ramiz.

Javob sarlavhalari maydonlari serverga vaziyat qatoriga joylashtirilmaydigan javob haqida qo'shimcha ma'lumotlarni uzatish imkonini beradi. Ushbu sarlavha maydonlari server haqida va Request-URI tomonidan aniqlangan manbaga keyingi kirish haqida ma'lumot beradi.

  • Proksi-autentifikatsiya

  • WWW-Autentifikatsiya

Agar siz o'zingizning shaxsiy veb-mijoz va serveringizni yozmoqchi bo'lsangiz, shaxsiy maydonlaringizni kiritishingiz mumkin.

Javob xabariga misollar

Keling, hello.htm sahifasini olish uchun so'rov uchun HTTP javobini yaratish uchun barchasini birlashtiramiz. veb-server saytda ishlaydi

HTTP/1.1 200 OK Sana: Dushanba, 27-iyul 2009-yil 12:28:53 GMT Server: Apache/2.2.14 (Win32) Oxirgi tahrirlangan: Chorshanba, 22-iyul 2009 19:15:56 GMT Kontent-uzunligi: 88 Tarkib Turi: text/html Ulanish: Yopiq Salom, dunyo!

Quyidagi misolda veb-server so'ralgan sahifani topa olmaganida xato holatini aks ettiruvchi HTTP javob xabari ko'rsatilgan:

HTTP/1.1 404 topilmadi: Yakshanba, 18-oktabr 2012-yil 10:36:20 GMT Server: Apache/2.2.14 (Win32) Kontent uzunligi: 230 Ulanish: Yopiq kontent turi: matn/html; charset=iso-8859-1 404 topilmadi

Ushbu serverda so'ralgan URL /t.html topilmadi.

Quyida veb-server berilgan HTTP so'rovida noto'g'ri HTTP versiyasiga duch kelganida xato holatini ko'rsatadigan HTTP javob xabariga misol keltirilgan:

HTTP/1.1 400 Noto'g'ri so'rov Sana: Yakshanba, 18 oktyabr 2012 yil 10:36:20 GMT Server: Apache/2.2.14 (Win32) Kontent uzunligi: 230 Kontent turi: matn/html; charset=iso-8859-1 Ulanish: Yopiq 400 ta noto'g'ri so'rov Yomon so'rov

Sizning brauzeringiz ushbu server tushunolmaydigan so'rov yubordi.

So'rov qatorida protokol qatoridan keyin yaroqsiz belgilar mavjud edi.