پاسخ های قوی html. اشکال دیوانه. آدرس ایمیل

حملات تزریق اسکریپت بین سایتی

در یک حمله اسکریپت نویسی متقابل (XSS)، یک مهاجم کد مخرب را به یک صفحه وب قانونی تزریق می کند، که سپس یک اسکریپت مخرب را در سمت مشتری اجرا می کند. هنگامی که کاربر از یک صفحه آلوده بازدید می کند، اسکریپت در مرورگر کاربر دانلود شده و در آنجا اجرا می شود. این طرح دارای انواع مختلفی است. یک اسکریپت مخرب می تواند به کوکی های مرورگر، نشانه های جلسه یا سایر اطلاعات حساس ذخیره شده در مرورگر دسترسی داشته باشد. با این حال، تمام حملات بر اساس طرح نشان داده شده در شکل 1 عمل می کنند.

شکل 1. شکل 1. حمله معمولی XSS
آسیب پذیری های XSS

در یک حمله معمولی XSS، مهاجم راهی برای تزریق یک رشته به صفحه وب سرور پیدا می کند. فرض کنید یک مهاجم خط زیر را به یک صفحه وب تزریق کرده است: alert("شما تحت حمله هستید") . هر بار که کاربر از این صفحه بازدید می کند، مرورگر او این اسکریپت را دانلود کرده و همراه با بقیه محتوای صفحه اجرا می کند. در این حالت، در نتیجه اجرای اسکریپت، کاربر یک پنجره پاپ آپ با متن "شما تحت حمله هستید" می بیند.

عواقب XSS

اگر یک مهاجم بتواند از یک آسیب پذیری XSS در یک برنامه وب سوء استفاده کند، می تواند اسکریپتی را به صفحه تزریق کند که دسترسی به داده ها را فراهم کند. حسابکاربر. در این مورد، مهاجم می تواند بسیاری از اقدامات مخرب را انجام دهد، به عنوان مثال:

  • سرقت یک حساب کاربری؛
  • انتشار ویروس ها؛
  • به تاریخچه مرور و محتوای کلیپ بورد خود دسترسی داشته باشید.
  • فرصتی بدست آورید کنترل از راه دورمرورگر؛
  • منابع و برنامه های کاربردی سخت افزاری و نرم افزاری را در شبکه داخلی اسکن و استفاده کنید.
جلوگیری از حملات XSS

برای جلوگیری از حملات XSS، برنامه باید خروجی صفحه را قبل از تحویل آن به کاربر نهایی رمزگذاری کند. هنگام رمزگذاری داده های خروجی نشانه گذاری HTMLبا نمایندگی های جایگزین جایگزین شد - اشیاء. مرورگر این اشیاء را نمایش می دهد اما آنها را راه اندازی نمی کند. به عنوان مثال تبدیل به .

جدول 1 نام اشیا را برای برخی از کاراکترهای رایج HTML نشان می دهد.

جدول 1. نام اشیاء برای کاراکترهای HTML نتیجه شرح نام شیء شماره شی
فضای بدون شکستگی
< کمتر از<
> بیشتر از> >
& آمپرسند& &
¢ سنت¢ ¢
£ پوند£ £
¥ ینا¥ ¥
یورو
§ پاراگراف§ §
© کپی رایت ©
® ® ®
علامت تجاری

هنگامی که مرورگر با اشیاء روبرو می شود، آنها دوباره به HTML تبدیل می شوند و چاپ می شوند، اما فعال نمی شوند. به عنوان مثال، اگر یک مهاجم هشدار رشته ای ("شما تحت حمله هستید") را در یک فیلد متغیر در صفحه وب سرور وارد کند، در هنگام استفاده از استراتژی توصیف شده، سرور هشدار رشته ای ("شما تحت حمله هستید") را برمی گرداند. .

هنگامی که مرورگر اسکریپت رمزگذاری شده را دانلود می کند، آن را به هشدار ("شما تحت حمله هستید") تبدیل می کند و اسکریپت را به عنوان بخشی از صفحه وب نمایش می دهد، اما آن را اجرا نمی کند.

اضافه کردن کد HTML به یک برنامه جاوا سمت سرور

برای جلوگیری از رندر شدن کد اسکریپت مخرب همراه با صفحه، برنامه شما باید همه متغیرهای رشته را قبل از رندر شدن در صفحه رمزگذاری کند. رمزگذاری شامل تبدیل سادههر کاراکتر به نام شی HTML مربوطه، همانطور که در نشان داده شده است کد جاوادر فهرست 1 نشان داده شده است.

فهرست 1. تبدیل کاراکترها به نام اشیاء HTML کلاس عمومی EscapeUtils ( public static final HashMap m = new HashMap(); static ( m.put(34, """); //< - меньше чем m.put(60, ""); // >- بیشتر از //کاربر باید با همه مطابقت داشته باشد اشیاء htmlبا مقادیر اعشاری مربوطه // نگاشت شی به مقادیر اعشاری در جدول زیر نشان داده شده است) عمومی static String escapeHtml() (String str = "alert(\"abc\")"؛ try (StringWriter writer = new StringWriter((int) (str .length() * 1.5))؛ escape(writer, str)؛ System.out.println ("رشته رمزگذاری شده " + writer.toString())؛ بازگشت writer.toString(); ) catch (IOException ioe) (ioe .printStackTrace() ؛ return null< 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 (نویسنده. write(entityName); )))))

کد جاوا در فهرست 1 رشته HTML "alert(\"abc\)" را رمزگذاری می کند. از روش زیر استفاده کنید:

در نتیجه، خط زیر در خروجی ظاهر می شود: alert("abc") .

جدول 2 نگاشت اشیاء HTML به مقادیر اعشاری آنها را نشان می دهد.

جدول 2. مقادیر اعشاری شی HTML مقدار اعشاری توضیحات شی
160 فضای بدون شکستگی
60 < کمتر از
62 > بیشتر از
38 & آمپرسند
162 ¢ سنت
163 £ پوند
165 ¥ ینا
8364 یورو
167 § پاراگراف
169 کپی رایت
174 ® علامت تجاری ثبت شده
8482 علامت تجاری
نتیجه

تزریق اسکریپت بین سایتی یکی از رایج ترین روش های حمله به رایانه کاربر است. با این حال، شما می توانید به طور قابل توجهی توانایی مهاجم را در آلوده کردن برنامه وب شما با کدهای مخرب کاهش دهید. هنگام ساخت برنامه خود، مراقب باشید که تمام مقادیر خروجی صفحه را قبل از ارسال به مرورگر کاربر نهایی رمزگذاری کنید.

ایجاد پاسخ از کنترلرها

پس از اینکه کنترلر پردازش درخواست را به پایان رساند، معمولاً نیاز به ایجاد یک پاسخ دارد. هنگامی که با پیاده سازی مستقیم رابط IController یک کنترل کننده سطح پایین ایجاد می کنیم، باید مسئولیت هر جنبه ای از پردازش درخواست، از جمله ایجاد پاسخ به مشتری را بر عهده بگیریم.

به عنوان مثال، برای ارسال یک پاسخ HTML، باید داده های HTML را ایجاد و ترکیب کنید و سپس با استفاده از متد Response.Write () آن را برای مشتری ارسال کنید. به طور مشابه، برای تغییر مسیر مرورگر کاربر به یک URL دیگر، باید متد Response.Redirect() را فراخوانی کرده و URL مورد نیاز را به آن ارسال کنید. هر دو رویکرد در کد زیر نشان داده شده اند، که پسوندهای کلاس BasicController را نشان می دهد که در مقاله قبلی با پیاده سازی رابط IController ایجاد کردیم:

با استفاده از System.Web.Mvc; با استفاده از System.Web.Routing. فضای نام ControllersAndActions.Controllers ( کلاس عمومی BasicController: IController ( عمومی void Execute(RequestContext requestContext) ( string controller = (string)requestContext.RouteData.Values["controller"]؛ string action = (string)requestDataxt.actionaluest. "]؛ if (action.ToLower() == "redirect") ( requestContext.HttpContext.Response.Redirect("/Derived/Index"); ) other ( requestContext.HttpContext.Response.Write(string.Format("Controller : (0)، روش عمل: (1)"، کنترل کننده، عمل))؛ ) ) ))

همین رویکرد را می توان در مورد به ارث بردن یک کنترلر از کلاس Controller اعمال کرد. کلاس HttpResponseBase، که با خواندن ویژگی requestContext.HttpContext.Response در متد Execute() برگردانده می شود، همانطور که در مثال زیر نشان داده شده است، از طریق ویژگی Controller.Response قابل دسترسی است، که کلاس DerivedController را گسترش می دهد، همچنین قبلا توسط ایجاد شده است. ارث بردن از کلاس Controller:

استفاده از سیستم؛ با استفاده از System.Web؛ با استفاده از System.Web.Mvc; فضای نام ControllersAndActions.Controllers ( کلاس عمومی DerivedController: Controller ( عمومی ActionResult Index() ( // ... ) public void ProduceOutput() ( if (Server.MachineName == "ProfessorWeb") Response.Redirect("/Basic/Index" )؛ else Response.Write("کنترل کننده: مشتق شده، روش اقدام: تولید خروجی")؛ ) ))

متد ProduceOutput() از مقدار ویژگی Server.MachineName استفاده می کند تا تصمیم بگیرد که چه پاسخی به مشتری ارسال شود. ("ProfessorWeb" نام ماشین توسعه من است.)

اگرچه این رویکرد ایجاد پاسخ به کاربر کار می کند، اما چندین مشکل در آن وجود دارد:

    کلاس های کنترلر باید حاوی اطلاعاتی در مورد باشند ساختار HTMLیا URL، که خواندن و نگهداری کلاس ها را دشوار می کند.

    آزمایش واحد کنترل کننده ای که مستقیماً به خروجی پاسخ می دهد دشوار است. شما باید پیاده سازی های ساختگی شی Response را ایجاد کنید و سپس بتوانید خروجی کنترلر را پردازش کنید تا مشخص کنید که چیست. برای مثال، این ممکن است به معنای نیاز به تجزیه نشانه گذاری HTML در آن باشد کلید واژه ها، که یک فرآیند طولانی و خسته کننده است.

    پردازش جزئیات کوچک هر پاسخ به این روش پیچیده و مستعد خطا است. برخی از برنامه نویسان کنترل مطلق ارائه شده با ساخت یک کنترل کننده سطح پایین را دوست دارند، اما این معمولاً خیلی سریع پیچیده می شود.

خوشبختانه، چارچوب MVC ابزار مفیدی دارد که همه این مشکلات را حل می کند - نتایج اقدامات. بخش های زیر مفهوم نتایج عمل را توضیح می دهد و نشان می دهد راه های مختلفاستفاده از آن برای تولید پاسخ از کنترلرها.

نتایج اقدامات

نتایج عمل در چارچوب MVC برای جدا کردن عبارات قصد از اجرای intent استفاده می‌شود (با عرض پوزش برای توتولوژی). این مفهوم زمانی که به آن دست پیدا کردید ساده به نظر می رسد، اما به دلیل برخی غیرمستقیم بودن درک آن کمی زمان می برد.

متدهای اقدام به جای اینکه مستقیماً با یک شی Response سروکار داشته باشند، یک شی کلاس مشتق از ActionResult را برمی‌گردانند که توضیح می‌دهد که پاسخ کنترل‌کننده چگونه باید باشد - به عنوان مثال، رندر کردن یک view یا هدایت مجدد به URL یا متد اقدام دیگر. با این حال (این بسیار غیر مستقیم است) پاسخ به طور مستقیم ایجاد نمی شود. در عوض، یک شی ActionResult ایجاد می شود که MVC Framework آن را پردازش می کند تا پس از فراخوانی متد اقدام، نتیجه را ایجاد کند.

یک سیستم نتایج عمل نمونه ای از الگوی طراحی فرمان است. این الگو سناریوهایی را نشان می دهد که در آنها اشیایی را ذخیره و ارسال می کنید که عملیات انجام شده را توصیف می کنند.

هنگامی که چارچوب MVC یک شی ActionResult را از یک متد اقدام دریافت می کند، فراخوانی می کند متد ExecuteResult().، در کلاس این شی تعریف شده است. سپس پیاده‌سازی نتایج عمل بر روی شی Response عمل می‌کند و خروجی‌ای تولید می‌کند که با هدف شما مطابقت دارد. برای نشان دادن این در عمل، بیایید یک پوشه Infrastructure ایجاد کنیم و یک فایل کلاس جدید به نام CustomRedirectResult.cs با اجرای ActionResult سفارشی که در مثال زیر نشان داده شده است، به آن اضافه کنیم:

با استفاده از System.Web.Mvc; فضای نام ControllersAndActions.Infrastructure ( کلاس عمومی CustomRedirectResult: ActionResult ( URL رشته عمومی ( دریافت؛ تنظیم؛ ) لغو عمومی void ExecuteResult(ControllerContext context) ( string fullUrl = UrlHelper.GenerateContentUrl.Helper.Help. (fullUrl)؛ ) )

این کلاس بر اساس روش کار کلاس System.Web.Mvc.RedirectResult است. یکی از مزایای چارچوب متن باز MVC، توانایی کشف عملکرد درونی هر چیزی است. کلاس CustomRedirectResult بسیار ساده تر از معادل MVC آن است، اما برای اهداف این مقاله کافی است.

هنگام نمونه سازی کلاس RedirectResult، URL را وارد می کنیم که کاربر باید به آن هدایت شود. متد ExecuteResult() که با تکمیل متد اقدام توسط چارچوب MVC اجرا می شود، دریافت می کند. شی پاسخبرای ایجاد یک درخواست از طریق شی ControllerContext ارائه شده توسط چارچوب و فراخوانی روش RedirectPermanent() یا Redirect() (این دقیقا همان چیزی است که در داخل پیاده سازی IController سطح پایین در مثال قبلی در مقاله انجام شد).

استفاده از کلاس CustomRedirectResult در مثال زیر نشان داده شده است، که تغییرات اعمال شده در کنترلر Derived را نشان می دهد:

// ... با استفاده از ControllersAndActions.Infrastructure; فضای نام ControllersAndActions.Controllers ( کلاس عمومی DerivedController: Controller ( عمومی ActionResult Index() ( // ... ) public ActionResult ProduceOutput() ( if (Server.MachineName == "MyMachineName") جدید CustomRedirectResult "/Ba Urlic/ Index" )؛ else ( Response.Write("کنترل کننده: مشتق شده، روش اقدام: ProduceOutput")؛ بازگشت تهی؛ ) )))

توجه داشته باشید که ما مجبور شدیم نتیجه متد اقدام را به ActionResult برگردانیم. اگر نمی‌خواهیم چارچوب MVC زمانی که متد عمل ما اجرا می‌شود کاری انجام ندهد، null را برمی‌گردانیم، اگر نمونه CustomRedirectResult برگردانده نشد، این کار را انجام دادیم.

کنترلرها و اقدامات تست واحد

بسیاری از بخش‌های چارچوب MVC برای آسان‌تر کردن تست واحد طراحی شده‌اند، و این به ویژه در مورد اکشن‌ها و کنترل‌کننده‌ها صادق است. چندین دلیل برای این حمایت وجود دارد:

می‌توانید کنش‌ها و کنترل‌کننده‌ها را خارج از وب سرور آزمایش کنید. اشیاء زمینه از طریق کلاس های پایه آنها (مانند HttpRequestBase) قابل دسترسی است که به راحتی قابل تمسخر است.

برای آزمایش نتایج یک روش اقدام، نیازی به تجزیه نشانه گذاری HTML ندارید. برای اطمینان از اینکه نتایج مورد انتظار را دریافت می کنید، می توانید شی ActionResult برگشتی را بررسی کنید.

شبیه سازی درخواست های مشتری مورد نیاز نیست. سیستم اتصال مدل MVC Framework به شما اجازه می دهد تا متدهای عملی را بنویسید که ورودی را در پارامترهای خود دریافت می کنند. برای آزمایش یک متد عمل، به سادگی آن را به طور مستقیم فراخوانی کرده و مقادیر پارامتر مناسب را ارائه دهید.

مقاله‌های آینده در مورد تولید داده‌ها از کنترل‌کننده‌ها، نحوه ایجاد تست‌های واحد برای انواع مختلف نتایج عملکرد را به شما نشان خواهند داد.

فراموش نکنید که تست واحد تنها بخشی از تصویر است. رفتار پیچیده در یک برنامه زمانی رخ می دهد که متدهای عمل به صورت متوالی فراخوانی شوند. تست واحد زمانی بهترین کار را دارد که با سایر روش های آزمایش ترکیب شود.

اکنون که می‌دانید نتیجه ویژه یک عمل تغییر مسیر چگونه کار می‌کند، می‌توانید به معادل آن ارائه شده توسط چارچوب MVC، که قدرتمندتر است و توسط مایکروسافت کاملاً آزمایش شده است، بروید. تغییر مورد نیاز در کنترل کننده مشتق شده در زیر آورده شده است:

// ... عمومی ActionResult ProduceOutput() ( RedirectResult جدید را برگرداند ("/Basic/Index"); ) // ...

عبارت شرطی از روش اقدام حذف شده است، به این معنی که پس از راه اندازی برنامه و پیمایش به URL مانند /Derived/ProduceOutput، مرورگر به URL مانند /Basic/Index هدایت می شود. برای ساده کردن کد متد اقدام، کلاس Controller شامل متدهای راحت برای تولید انواع مختلف اشیاء ActionResult است. بنابراین، برای مثال، می‌توانیم با برگرداندن نتیجه متد Redirect() به همان اثری که در مثال بالا آمده است برسیم:

// ... عمومی ActionResult ProduceOutput() (redirect Redirect("/Basic/Index"); ) // ...

هیچ چیز پیچیده‌ای در مورد سیستم نتایج عمل وجود ندارد، اما در نهایت به تولید کد ساده‌تر، تمیزتر و سازگارتر کمک می‌کند که خواندن و آزمایش واحد آسان‌تر باشد. به عنوان مثال، در مورد تغییر مسیر، می‌توانید به سادگی بررسی کنید که متد اقدام یک نمونه RedirectResult را برمی‌گرداند که ویژگی Url آن حاوی هدف مورد انتظار است.

چارچوب MVC بسیاری از انواع نتایج عملکرد داخلی را تعریف می کند که در جدول زیر توضیح داده شده است:

انواع ActionResult داخلی توضیحات Helper method از کلاس Controller را تایپ کنید
نمایش نتیجه

الگوی نمای مشخص یا استاندارد را ارائه می دهد

چشم انداز()
PartialView Result

الگوی نمای جزئی مشخص یا استاندارد را ارائه می دهد

PartialView()
RedirectToRouteResult

مسائل تغییر مسیر HTTP 301 یا 302 به یک روش اقدام یا ورودی مسیر مشخص شده، ایجاد URL با توجه به پیکربندی مسیریابی

RedirectToAction()
RedirectToActionPermanent()
RedirectToRoute()
RedirectToRoutePermanent()
Redirect Result

یک تغییر مسیر HTTP 301 یا 302 به URL داده شده صادر می کند

تغییر مسیر ()
Redirect Permanent()
نتیجه محتوا

داده های متنی فرمت نشده را به مرورگر برمی گرداند و همچنین سربرگ نوع محتوا را تنظیم می کند

محتوا()
File Result

داده های باینری (مانند یک فایل روی دیسک یا یک آرایه بایت در حافظه) را مستقیماً به مرورگر منتقل می کند.

فایل()
JsonResult

یک شی دات نت را سریال می کند فرمت JSONو به عنوان پاسخ ارسال می کند. پاسخ‌هایی از این نوع اغلب هنگام استفاده از Web API و ابزارهای AJAX ایجاد می‌شوند

جیسون ()
JavaScript Result

یک قطعه ارسال می کند کد منبعجاوا اسکریپتی که باید توسط مرورگر اجرا شود

جاوا اسکریپت()
HttpUnauthorized Result

کد وضعیت پاسخ HTTP را روی 401 تنظیم می کند (به معنی "مجاز نیست")، که باعث می شود مکانیسم احراز هویت در محل (احراز هویت فرم ها یا تأیید هویت ویندوز) از بازدید کننده درخواست کند تا به سیستم وارد شود.

خیر
HttpNotFoundResult

برمی گرداند خطای HTTPبا کد 404 - یافت نشد (یافت نشد)

HttpNotFound()
HttpStatusCodeResult

کد HTTP مشخص شده را برمی گرداند

خیر
EmptyResult

هیچ کاری نکردن

خیر

همه این انواع از کلاس ActionResult مشتق شده اند و بسیاری از آنها روش های کمکی مناسبی در کلاس Controller دارند. استفاده از این نوع نتایج را در مقالات بعدی نشان خواهیم داد.

پس از دریافت و تفسیر یک پیام درخواست، سرور با یک پیام پاسخ HTTP پاسخ می دهد:

  • یک خط وضعیت
  • صفر یا بیشتر فیلدهای سرصفحه (عمومی|پاسخ|موجود) به دنبال CRLF
  • یک خط خالی (به عنوان مثال، یک خط بدون هیچ چیز قبل از CRLF) که پایان فیلدهای هدر را نشان می دهد.
  • اختیاری یک پیام بدن
  • بخش‌های زیر هر کدام در مورد موجودیت‌های مورد استفاده در پیام پاسخ HTTP توضیح می‌دهند.

    پیام وضعیت-خط

    یک Status-Line شامل نسخه پروتکل و به دنبال آن یک کد وضعیت عددی و عبارت متنی مرتبط با آن است. عناصر با کاراکترهای Space SP از هم جدا می شوند.

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF نسخه HTTP

سروری که HTTP نسخه 1.1 را پشتیبانی می کند، اطلاعات نسخه زیر را برمی گرداند:

HTTP-Version = HTTP/1.1

کد وضعیت

عنصر Status-Code یک عدد صحیح 3 رقمی است که اولین رقم Status-Code کلاس پاسخ را تعریف می کند و دو رقم آخر هیچ نقش دسته بندی ندارند. 5 مقدار برای رقم اول وجود دارد:

S.N. کد و توضیحات
1 1xx: اطلاعاتی

یعنی درخواست دریافت شد و روند ادامه دارد.

2 2xx: موفقیت

به این معنی است که اقدام با موفقیت دریافت، درک و پذیرفته شد.

3 3xx: تغییر مسیر

این بدان معناست که برای تکمیل درخواست باید اقدامات بیشتری انجام شود.

4 4xx: خطای مشتری

به این معنی است که درخواست حاوی نحو نادرستی است یا قابل انجام نیست.

5 5xx: خطای سرور

این بدان معناست که سرور در انجام یک درخواست ظاهرا معتبر شکست خورده است.

کدهای وضعیت HTTP قابل توسعه هستند و برنامه های کاربردی HTTP برای درک معنای همه کدهای وضعیت ثبت شده لازم نیستند. فهرستی از تمام کدهای وضعیت در فصلی جداگانه آورده شده است برای شماارجاع.

فیلدهای سرصفحه پاسخ

زمانی که فیلدهای هدر HTTP را یاد می گیریم، General-header و Entity-header را در فصلی جداگانه مطالعه خواهیم کرد. در حال حاضر، بیایید بررسی کنیم که فیلدهای سرصفحه پاسخ چیست.

فیلدهای سرصفحه پاسخ به سرور اجازه می دهد تا اطلاعات بیشتری در مورد پاسخ ارسال کند که نمی تواند در خط وضعیت قرار گیرد. این فیلدهای سرصفحه اطلاعاتی در مورد سرور و دسترسی بیشتر به منبع شناسایی شده توسط Request-URI می دهد.

  • پروکسی-احراز هویت

  • WWW-Authenticate

در صورتی که می‌خواهید وب مشتری و سرور سفارشی خود را بنویسید، می‌توانید فیلدهای سفارشی خود را معرفی کنید.

نمونه هایی از پیام پاسخ

حالا بیایید همه را کنار هم بگذاریم تا یک پاسخ HTTP برای درخواست واکشی صفحه hello.htm از وب سروردر حال اجرا در سایت

HTTP/1.1 200 OK تاریخ: دوشنبه، 27 ژوئیه 2009، 12:28:53 GMT سرور: Apache/2.2.14 (Win32) آخرین تغییر: چهارشنبه، 22 ژوئیه 2009، 19:15:56 GMT Content-Length: نوع: text/html اتصال: بسته سلام، جهان!

مثال زیر یک پیام پاسخ HTTP را نشان می دهد که شرایط خطا را زمانی که سرور وب نمی تواند صفحه درخواستی را پیدا کند نشان می دهد:

HTTP/1.1 404 یافت نشد تاریخ: یکشنبه، 18 اکتبر 2012، 10:36:20 GMT سرور: Apache/2.2.14 (Win32) Content-Length: 230 اتصال: Closed Content-نوع: text/html; charset=iso-8859-1 404 یافت نشد یافت نشد

URL درخواستی /t.html در این سرور یافت نشد.

در زیر نمونه ای از پیام پاسخ HTTP است که شرایط خطا را نشان می دهد زمانی که سرور وب با نسخه HTTP اشتباهی در درخواست HTTP داده شده مواجه می شود:

HTTP/1.1 400 درخواست بدتاریخ: Sun, 18 Oct 2012 10:36:20 GMT سرور: Apache/2.2.14 (Win32) Content-Length: 230 Content-نوع: text/html; charset=iso-8859-1 اتصال: بسته شد 400 درخواست بد درخواست بد

مرورگر شما درخواستی ارسال کرد که این سرور قادر به درک آن نبود.

خط درخواست حاوی کاراکترهای نامعتبر پس از رشته پروتکل است.