بررسی کدهای وضعیت Http از لحاظ سئو و کشف مشکلات وبسایت دارای اهمیت بسیار بالایی است. به عنوان مثال یک سئو کار باید بداند در صورت حذف یک پست از روی وبسایت چگونه عمل کند و چه کدی را برای موتور جستجوی گوگل ارسال کند یا اینکه در صورت مواجهه با خطای ۴۰۴ در کنسول جستجو گوگل یا Google Search Console چه راهکاری باید ارائه کند. علاوه بر آن این کدها برای برنامه نویس و توسعه دهنده وبسایت هم گویای بروز یک مشکل در وبسایت است که توسعه دهنده باید خطا بوجود آمده را رفع و از متضرر شدن وبسایت جلوگیری کند.

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

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

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

اگر شما صاحب یک وب سایت هستید و یا توسعه دهنده وب سایت هستید، درک و فهم کدهای وضعیت HTTP برای شما بسیار لازم است است. وقتی بدانیم چه کدی از سمت سرور برای ما ارسال شده برای عیب یابی و یا رفع آن عیب و رفع خطای وبسایت بسیار به ارزشمند است.

در این مقاله چندین فهرست کدهای وضعیت و خطای سرور را بررسی می کنیم و توضیح می دهیم که این کدها چگونه اتفاقات پشت صحنه سرور را مشخص می کند. پس شروع می کنیم…

کدهای وضعیت HTTP چه هستند؟

همانطور که بالا گفته شد زمانی که شما روی یکی لینک یا داخل نوار آدرس مرورگر سایتی را تایپ می کنید و Enter می زنید، مرورگر شما یک درخواست به وب سرور که سایت مورد نظر شما داخل آن است ارسال می کند و تلاش می کند که به آن سایت دسترسی پیدا کند. سروردرخواست را دریافت و آن را پردازش می کند، و سپس داده ها و نتایج مرتبط را به همراه یک هدر یا سرآیند HTTP ارسال ارسال می کند. می توانید نتیجه یک درخواست یا پاسخ سرور را در زیر مشاهده کنید:

HTTP/1.1 200 OK
Connection: Keep-Alive
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Type: text/html; charset=UTF-8
...

همانطور که در بالا مشاهده می کنید کدهای وضعیت HTTP در قالب هدر یا سرآیند HTTP تحویل مرورگر شما می شود. در تمامی درخواست هایی که از طریق مرورگر برای مشاهده سایت ارسال می کند این نوع نتیجه به مرورگر شما ارسال می شود اما شما در حالت معمول آن را نمی بیند و مرورگر آنها را برای شما چاپ نمی کند. درخواست بالا با موفقیت انجام شده و سایت را بدون مشکل میبینید و در واقع سرور کد ۲۰۰ را برای مرورگر شما که نشان دهنده موفقیت آمیز بودن درخواست است برگردانده.(درباره کد ۲۰۰ در بخش کدها بیشتر خواهم گفت)

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

 کدهای وضعیت HTTP

اما گفتیم که مرورگر به طور معمول کد دریافتی از سرور را به شما نمایش نمی دهد ولی ابزارهای مختلفی این کار را برای شما انجام می دهند. یکی از این ابزارها وبسایت httpstatus.io هست که می توانید یک یا چند آدرس را وارد کنید و کد وضعیت آن ها را بررسی کنید. مثلا در تصویر زیر ما دو آدرس که یک آدرس صحیح و یک آدرسی که وجود ندارد در این ابزار بررسی کرده ایم:

 کدهای وضعیت HTTP

درک کلاس های کدهای وضعیت HTTP

کدهای وضعیت HTTP به ۵ دسته، کلاس یا سطح تقسیم می شوند. همانطور که مشخص است با توجه به شباهت معنایی پاسخ گروه بندی شده اند. پس قبل از بررسی دقیق کد ها بهتر است که عملکرد و معنای کلی این کلاس ها را ببینیم.

۵ کلاس شامل موارد زیر می شود:

کلاس ۱۰۰: این کدهای شامل اطلاعای هستند که نشان می دهد درخواست شروع شده توسط مرورگر در حال اجرا و ادامه است.

کلاس ۲۰۰: وقتی که درخواست مرورگر دریافت شده است و توسط سرور پردازش بشود نتیجه موفقت آمیز به همراه یکی از کدهای این کلاس برگردانده می شود.

کلاس ۳۰۰: وقتی آدرس درخواستی توسط آدرس جدید جایگزین شده باشد کدهای ریدارکت یا بازگشتی که مربوط به این کلاس هستند برگردانده می شود.

کلاس ۴۰۰: وقتی کدهای خطای کلاینت اتفاق می افتند نشا می دهد که مشکلی در درخواست رخ داده است که عامل بروز آن مشکل کلاینت یا مروگر است.

کلاس ۵۰۰: وقتی هم که کدهای خطای سرور برگردانده می شود میفهمیم که درخواست پذیرفته شده اما یک خطا روی خود سرور از تکمیل درخواست جلوگیری کرده است.

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

چرا خطاها و کدهای وضعیت HTTP برای بهینه سازی موتورهای جستجو یا SEO اهمیت دارد؟

ربات های موتور جستجو زمانی که درون وبسایت شما میخزن و سایت شما را بررسی می کنند کدهای وضعیت HTTP را میبینند و درک می کنند. در برخی موارد، خزنده با توجه به کد وضعیت درباره ایندکس کردن و یا چگونه ایندکس کردن این صفحه تصیمی گیری می کند با توجه به کد برگشتی متوجه سالم بودن و یا عیب داشتن سایت یا صفحه شما می شود.

به طور کلی، کدهای وضعیت کلاس های ۱۰۰ و ۲۰۰ ضربه زیادی به سئوی سایت شما نمی زنند، در واقع این کدها نشان می دهد که سایت شما همانطوری که باید کار می کند و خزنده های موتورهای جستجو بدون مشکل می توانند سایت شما را بررسی و ایندکس کنند. البته در نظر داشته باشید که این به معنی ارتقاء رتبه سایت یا صفحه شما در گوگل نیست و صرفا به این معنی است که سایت و صفحه شما در رقابت صفحات و نتایج گوگل وجود دارد.

بیشتر بحث در خصوص کد ها روی کلاس هایی است که سئو را دچار مشکل می کند. پاسخ های کلاس ۴۰۰ و ۵۰۰ می توانند جلوی ربات های خزنده موتوهای جستجو را بگیرند و باعث شوند که صفحات سایت شما ایندکس نشوند. خیلی از این خطاها می تواند  باعث شود که موتور جستجو محتوای و کیفیت سایت شما را خوب ارزیابی نکند و بنابراین رتبه سایت شما در گوگل دچار افت شود یا حتی ممکن است رتبه خود را از دست بدهید.

کدهای وضعیت کلاس ۳۰۰ در ارتباط با سئو کمی پیچیده عمل می کنند. اصلی ترین چیزی که در خصوص این کلاس باید بدانید تفاوت بین ریدایرکت موقت و یا دائم است که در آینده در این خصصوص مقاله خواهم نوشت.

بررسی کدهای وضعیت در کنسول جستجو گوگل یا Google Search Console

یک روش مشاهده برای اینکه ببینیم گوگل چطور کدهای وضعیت HTTP ار روی وبسایت شما مشاهده و درک می کند استفاده از کنسول جستجوی گوگل یا Google Search Console است. شما می توانید کدهای وضعیت کلاس ۳۰۰، ۴۰۰ و ۵۰۰ را در بخش گزارش Coverage مشاهده کنید.

این قسمت از پیشخوان چها نوع محتوا را روی سایت شما نشان می دهد:

  • بخش Error: صفحاتی که خطا تولید می کنند
  • بخش Valid With Warning: صفحات تأیید شده که گوگل در باره آنها هشدار می دهد و دارای اشکال هستند
  • بخش Valid: صفحاتی که تأیید شده هستند
  • بخش Excluded: محتوایی که به دلایل مختلف از ایندکس شدن مستثنی شده اند

همانطور که در تصویر بالا مشاهده می کنید ممکن است صفحات با کد وضعیت HTTP را زیر بخش های Excluded، Error و یا Valid With Warning پیدا کنید. خطاها با کد کلاس ۴۰۰ و ۵۰۰ غالبا زیر بخش Error مشاهده می شود چون غالبا این کد های یعنی صفحه یا سایت دچار مشکل است.

روش دیگری که برای مشاهده کدهای وضعیت HTTP استفاده می شود ابزار URL Inspection است. با این ابزار اگر گوگل به هر دلیل نتواند صفحه شما ایندکس کند، می توانید دلیل آن را در این بخش جستجو کنید که در این مثال گوگل صفحه مورد نظر را پیدا نکرده و خطای ۴۰۴ یعنی «صفحه یافت نشد» را دریافت کرده برای همین قادر به ایندکس کردن صفحه نیست:

راهنما و لیست کدهای وضعیت HTTP

هر چند که بیش از ۴۰ کد وضعیت متفاوت سرور وجود دارد با این حال شما با کمتر از ۱۲ تا از کدهای اصلی و مهم سر و کار خواهید داشت. در زیر ما رایج ترین کدهایی که در طول کار با وبسایت یا توسعه و یا حتی سئو با آن ها برخورد خواهید داشت.

کدهای وضعیت ۱۰۰

کدهای کلاس یا سطح ۱۰۰ به شما می گوید که درخواستی که به سرور ارسال کرده اید هنوز به دلایلی در حال پردازش است. این کد لزوما یک مشکل نیست. فقط برای اینکه بدانید چه اتفاقی در حال رخ دادن است اطلاعات بیشتری به شما می دهد.

کد وضعیت ۱۰۰: این کد با عنوان Continue یا ادامه به این معنی است که سرور هدر یا سرآیند مرورگر شما را دریافت کرده است، و هم اکنون برای درخواست بدنه برای ارسال آماده است. این فرآیند درخواست به دلیل جلوگیری از ارسال یک درخواست بدنه که حتی با وجود هدر رد می شود را کارآمد می کند. اجازه بدهید یک مثال بزنم:

تصور کنید یک فرم ارسال فایل دارید که قرار است فایلی با حجم ۱ گیگابایت را آپلود کنید، اما بعد از آپلود به سرور می گوید که شما احرازهویت نشده اید و باید وارد شده و مجدد فایل را ارسال کنید. یعنی کل آپلود شما نابود شد. در این شرایط راهکار استفاده از کد وضعیت ۱۰۰ است. اما در این جا این کد چطور ایفای نقش می کند؟ فقط این نکته مد نظر باشد که فایل شما برای ارسال به منزله بدنه درخواست آپلود شماست.

به طور خلاصه با استفاده از کد ۱۰۰ مروگر شما ابتدا هدر خود را ارسال می کند و با استفاده از هدر Expect به سرور می گویند که این یک درخواست ادامه دار است و هنوز قرار است بدنه درخواست(مثلا یک فایل) قرار است در درخواست بعدی ارسال شود درصورت نداشتن مشکل کد ۱۰۰ را برایم بفرست.

PUT /media/file.mp4  HTTP/1.1
Host: api.example.org
Content-Length: 1073741824
Expect: 100-continue

اگر مشکلی وجود داشته باشد مثلا مشکل احراز هویت کلاینت متوجه مشکل شده و دیگر فایل یا بدنه درخواست را ارسال نمیکند اما اگر مشکلی نباشد سرور کد ۱۰۰ را برای کلاینت یا مرورگر ارسال می کند که به این معنی است که مشکلی وجود ندارد و بدنه درخواست را ارسال کند. اینطور از اتلاف زمان و هزینه جلوگیری می شود. در کد زیر سرور میگوید که مشکلی وجود ندارد و کلاینت کار خود را ادامه دهد:

HTTP/1.1 100 Continue

کد وضعیت ۱۰۱:  این کد هم با عنوان Switching Protocols یا تغییر پروتکل است و مرورگر از سرور می خواهد که پروتکل ها را تغییر دهد و هدر درخوسات را به روز کند.

کد وضعیت ۱۰۳: کد Early hints برخی هدرهای را ارسال می کند قبل از اینکه پاسخ سرور آماده باشد در واقع مروگر می تواند منابع را قبل از اینکه پاسخ سرور آماده و ارسال شود را از قبل لود کند.

کدهای وضعیت ۲۰۰

این بهترین نوع کد وضعیت HTTP است که می توانیم دریافت کنیم. پاسخ های کلاس یا سطح ۲۰۰ بدین معنی است که  همه چیز همانطور که باید درست کار میکند.

کد ۲۰۰: این کد یعنی همه چیز درست است. این کد وقتی که یک صفحه وب همانطور که انتظار می رود عمل می کند.

کد ۲۰۱:  به معنی Created و سرور درخواست مرورگر را انجام می دهد و به عنوان نتیجه یک منبع جدید را معرفی می کند. در واقع به این شکل است که درخواست کاملا موفق بوده ولی در این بین سرور علاوه بر ارسال پیام موفق آمیز بودن درخواست باید یک آدرس جدید هم در نتیجه درخواست در پارامتر Location ارسال کند اما قبل از ارسال پاسخ باید منبع یا منابع جدید از قبل وجود داشته باشد یا ایجاد شود.

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

HTTP/1.1 201 Created
Date: Sat, 02 Apr 2020 12:22:40 GMT
Location: /videos/2020/12/5u12kpaa.mp4
Content-Type: text/html

your file save!
Click <A href="/videos/2020/12/5u12kpaa.mp4">here</A> to view it.

کد ۲۰۲: «Accepted» سرور درخواست مرورگر را پذیرفته اما هنوز در حال پردازش آن است. اما درخواست ممکن است موفقیت آمیز باشد یانه! و معمولا برای درخواست هایی که پردازش زمان بر دارند استفاده می شود.

مثال: ما درخواست یک کار سنگین را که ۱۰ دقیقه طول می کشد را به سمت سرور میفرستیم. خب قطعا نمیتوانیم منتظر نتیجه باشیم. در این حالت سرور بلافاصله کار را در صف پردازش قرار می دهد و کد ۲۰۲ را برای ما میفرستد. و معمولا در این حالت آدرسی معرفی می شود که میتوانیم در درخواست های متوالی وضعیت این کار را از سرور جویا شویم. مثلا ما یک درخواست به سرور فرستادیم:

HTTP STATUS 202 (Accepted)
 
{
    "task": {
        "href": "/api/company/job-management/jobs/2130040",
        "id": "2130040"
    }
}

سرور با کد ۲۰۲ به ما میگویند که کار به صف پردازش ارسال شده و می توانید با این شناسه و ادرس اینترنتی وضعیت کار خود را بررسی کنید. که نمونه این حالت هم در زیر میبینید:

اول: پردازش هنوز شروع نشده

{
   "job" : {
     "@uri" : "/api/company/job-management/jobs/2130040" ,
     "id" : "2130040",
     "name" : "Update Resource",
     "job-state" : "SCHEDULED",
     "job-status" : "UNDETERMINED",
     "percent-complete" : "0",
     "scheduled-start-time" : "01-01-2013 10:50:45 PM GMT",
     "start-time" : "",
     "end-time" : "",
     "owner" : "Admin",
     "summary" : "random text"
   }
}

دوم: ۳۰درصد پردازش انجام شده

{
   "job" : {
     "@uri" : "/api/company/job-management/jobs/2130040" ,
     "id" : "2130040",
     "name" : "Update Resource",
     "job-state" : "STARTED",
     "job-status" : "INPROGRESS",
     "percent-complete" : "30",
     "scheduled-start-time" : "01-01-2013 10:50:45 PM GMT",
     "start-time" : "01-01-2013 10:50:55 PM GMT",
     "end-time" : "",
     "owner" : "Admin",
     "summary" : "random text"
   }
}

سوم: پردازش تکمیل شده

{
   "job" : {
     "@uri" : "/api/company/job-management/jobs/2130040" ,
     "id" : "2130040",
     "name" : "Update Resource",
     "job-state" : "COMPLETED",
     "job-status" : "SUCCESS",
     "percent-complete" : "100",
     "scheduled-start-time" : "01-01-2013 10:50:45 PM GMT",
     "start-time" : "01-01-2013 10:50:55 PM GMT",
     "end-time" : ""01-01-2013 10:52:18 PM GMT",
     "owner" : "Admin",
     "summary" : "random text"
   }
}

کد ۲۰۳: «Non-Authoritative Information» این کد وضعیت ممکن است زمانی که پراکسی در حال استفاده است رخ دهد. به این معنی که سرور پراکسی یک وضعیت کد ۲۰۰ را از سرور اصلی دریافت کرده است، اما قبل از ارسال آن به مرورگر شما پاسخ را تغییر داده و یا محدود کرده است است.

کد ۲۰۴: «No Content» یعنی درخواست با موفقت انجام شده اما هیچ محتوایی وجود ندارد که برای شما ارسال شود.

کد ۲۰۵: وضعیت Reset Content به این معنی که مرورگر باید بخش نمایش خود یا view را به روز کند. در یک مثال ساده سرور با کد ۲۰۵ به مروگر می گویند که برای درخواست بعدی داده های فرم را حذف کن و کاربر بدون درد سر شروع به ثبت داده جدید می کند.

کد ۲۰۶: وضعیت Partial Content یا بخشی از محتوا به این معنی است که درخواست موفق بود اما سرور فقط بخشی از محتوا را برای مرورگر ارسال کرده است. این نوع درخواست معمولا زمانی رخ می دهد که سرور از هدر «range headers» استفاده کند. این کار مرورگر را قادر می سازد تا دانلود ها را متوقف و مجدد ادامه داد و نرم افزارهای دانلود به عنوان Http Client به شدت از این هدر و وضعیت استفاده می کنند تا بتوانند امکان متوقف و ادامه دادن دانلود را به کاربر بدهند و همچنین همزمان بتوانند دانلود را در بخش های جداگانه دانلود و در آخر به یک فایل تبدیل کنند.

مثال دیگر اجرای فایل های صوتی و ویدئویی است و استفاده از هدر range content و کد ۲۰۰ این امکان را می دهد که کاربر هر دقیقه و ثانیه از ویدئو را که خواست کلیک کند و همانجا را مشاهده کند. زمانی که از یک فیلم یک ساعته در ابتدا روی دقیقه ۴۰ کلیک می کنید نیازی نیست تا صبر کنید که فیلم دانلود شود، بلکه مرورگر درخواستی را به سرور میفرستد که محتوای همان دقیقه ۴۰ را برای مرورگر ارسال کند. یک نمونه از هدر Range Content:

Content-Range: bytes 200-1000/67589 

کدهای وضعیت ۳۰۰

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

کد ۳۰۰: وضعیت Multiple Choices یا حالت چند انتخابی. گاهی  ممکن است پاسخ به یک درخواست بیشتر از یک نتیجه داشته باشد و مروگر، کلاینت یا کاربر باید تصمیم بگیرد که به کدام صفحه ریدایرکت شود. به این مثال توجه کنید:

HTTP/1.1 300 Multiple Choices
Server: curveball/0.3.1
Access-Control-Allow-Headers: Content-Type,User-Agent
Access-Control-Allow-Origin: *
Link: </foo> rel="alternate"
Link: </bar> rel="alternate"
Content-Type: text/html
Location: /foo

در این مثال سرور میگوید دو آدرس برای ریدایرکت وجود دارد که کلاینت باید انتخاب کند که به کدام یک میخواهد انتقال پیدا کند. در همین راستا میتوان با استفاده از جاوا اسکریپت(البته در اینجا جی کوئری) پیام انتخاب برای ریدارکت شدن را به کاربر نشان داد و در خط ششم طی یک انتخاب از کاربر درخواست میکنیم که مسیر ریدایرکت خود را انتخاب کند.

$.ajax({
    url: theURL,
    success: function(response, status, xhr) {
        var link = xhr.getResponseHeader('Link');
        if(link != null) {
            // my second ajax request to the link in the MyRedirectLocationHeader
        }
    }
});

کد ۳۰۱: این کد نشان می دهد که فایل یا صفحه درخواستی وجود دارد ولی به طور کامل از آدرس قبلی به آدرس جدید منتقل شده است. در این شرایط موتور جستجو آدرس جدید را ملاک قرار داده و آدرس قبلی را حذف خواهد کرد.

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

کد ۳۰۳: درک وضعیت ۳۰۳ نیازمند این است که تفاوت بین چهار روش اصلی درخواست HTTP یعنی GET، POST، HEAD و PUT را بدانید. اساسا ;د ۳۰۳ به مرورگر شما می گوید که صفحه یا فایلی که مرورگر درخواست کرده با روش های درخواست POST، PUT و یا DELETE پیدا شده. هر چند برای دریافت آنچه مد نظر شماست باید متد مورد نیاز را استفاده کنید.

کد ۳۰۴: منبع یا فایل درخواستی شما از آخرین باری که آن را دریافت کرده اید تغییری نداشته است. این کد به مرورگر میگویند که این فایل در کش مرورگر ذخیره شده و هیچ تغییری نداشته است و مرورگر برای افزایش سرعت، دوباره آن را دانلود نمی کند و از فایل موجود در کش استفاده می کند.

کد ۳۰۷: انتقال موقت. این کدعملکردی شبیه کد ۳۰۲ دارد اما بر خلاف کد ۳۰۲ اجازه تغییر روش درخواست HTTP را نمی دهد زیرا به طور کلی در کد های ۳۰۱ و ۳۰۲ اکثر کلاینت ها درخواست POST را به GET تبدیل و به آدرس جدید ارسال می کنند.

کد ۳۰۸: انتقال دائم: این کد هم عملکری شبیه کد ۳۰۱ دارد. اما اجازه تغییر روش درخواست HTTP را نمی دهد و نشان می دهد که منبع درخواستی به طور کامل در آدرس جدید قرار گرفته است.

کدهای وضعیت ۴۰۰

کدهای سطح ۴۰۰ کدهایی هستند که مشکل را نشان می دهد و به شما می گوید که یک مشکل خاص در مرورگر یا درخواست شما وجود دارد.

کد ۴۰۰: درخواست بد یا Bad Request، سرور به خاطر بروز خطا در سمت کلاینت نمی تواند پردازش انجام دهد و پاسخی برگرداند مثلا به علت نگارش یا سینتکس اشتباه در درخواست، اندازه خیلی بزرگ و …

کد ۴۰۱: درخواست غیر مجاز است یا نیاز به احراز هویت دارد. زمانی که دسترسی به آدرس یا فایل خاص فاقد احراز هویت باشد سرور این خطا را برمی گرداند. یکی از مثال ها رمز گذاری روی پوشه های خاص روی سرور است.

 کدهای وضعیت HTTP

کد ۴۰۲: نیازمند پرداخت، در اصل این کد برای استفاده به عنوان بخشی از سیستم پرداخت ایجاد شده است. هر چند این پلن هیچگاه دنبال نشد. به جای آن از پلتفرم های مختلف استفاده شده اس تا درخواستی که نمی تواند بعلت عدم پرداخت انجام شود را نشان دهد.

کد ۴۰۳: دسترسی به منبع مربوطه ممنوع می باشد. زمانی که کاربر قصد دسترسی به چیزی که شما اجازه برای مشاهده آن نداده اید را دارد این خطا نشان داده می شود. به عنوان مثال تلاش برای محتوای رمزگذاری شده بدون ورود می تواند خطای ۴۰۳ تولید کند.

کد ۴۰۴: آدرس یا فایل درخواستی یافت نشد، این خطا رایج ترین تمام خطاهاست. معنی این کد این است که آدرس درخواستی وجود ندارد.

کد ۴۰۵: عدم اجازه روش درخواستی، این خطا زمانی تولید می شود که سرور میزبان(سرور اصلی) روش درخواست را پشتیبانی می کند اما آدرس یا فایل هدف در آن روش درخواستی موجود نیست یا به عبارت دیگر آدرس مورد وجود دارد اما منطبق با متد یا روش درخواستی کلاینت نیست.

کد ۴۰۶: پاسخ سرور توسط کلاینت غیر قابل پذیرش است. زمانی که اتفاق می افتد که نوع پاسخی که توسط سرور تولید می شود بر اساس هدر درخواست توسط کلاینت قابل پذیرش نیست. به عنوان مثال زمانی که کلاینت در پارامتر Accept هدر درخواست خود می گوید که فقط متن نوع text/html را قبول می کند اما نوع خروجی در سمت سرور از نوع application/json است این خطا رخ می دهد.

کد ۴۰۷: احراز هویت پراکسی مورد نیاز است، یک سرور پراکسی در حال استفاده است و مرورگر برای ادامه کار خود نیازمند احراز هویت است.

کد ۴۰۸: خطای تایم اوت و یا اتمام زمان انتظار سرور برای دریافت درخواست کلاینت. زمانی که سرور منتظر می ماند تا ارسال درخواست کلاینت به سمتش کامل شود. به عبارت دیگر سرور درخواست کامل کلاینت را دریافت نکرده و خطای ۴۰۸ را تولید می کند. یکی از دلایلی که ممکن است باعث بروز این خطای شود گم شدن بسته های داده بین مرورگر و سرور است.

کد ۴۰۹: تداخل، یک کد وضعیت ۴۰۹ به این معنی است که سرور نمی تواند درخواست مرورگر را به دلیل تداخل بین منابع یا صفحات پردازش کند. گاهی به دلیل ویرایش های همزمان این اتفاق رخ می دهد.

کد ۴۱۰:  اصطلاحا به این کد Gone هم گفته می شود و به این معنی است که صفحه یا فایل درخواستی از بین رفته و بر نخواهد گشت، این خطا شبیه خطای ۴۰۴ یا «Not Found» است با این تفاوت که ۴۱۰ به کلاینت یا خزنده موتورهای جستجو می گوید که این فایل را خودمان برای همیشه حذف کردیم.

کد ۴۱۱: طول لازم، یه این معنی که منبع درخواستی نیازمند این است که کلاینت یک طول مشخص تعیین کند اما این کار را نکرده است.

کد ۴۱۲: خطای پیش شرط، مرورگر شما دارای شرایط معین در خواست هدرش است و سرور آنها را برآورده نکرده است.

کد ۴۱۳: ظرفیت انتقال خیلی بزرگ است یا موجودیت درخواست خیلی بزرگ است، درخوسات شما بزرگتر از آن است که سرور قادر یا مایل به پردازش آن باشد است. در مثال زیر تصویر پروفایل برای آپلود باید حداکثر ۱ مگابایت باشد اما کلاینت یک فایل بزرگتر را ارسال کرده است:

HTTP/1.1 413 Payload Too Large
Content-Type: text/html

<p>This endpoint does not support requests larger than 1MB</p>

کد ۴۱۴: آدرس Url خیلی طولانی است، معمولا درخواست GET که به صورت کوئری استرینگ کد شده باشد برای اینکه سرور آن را پردازش کند خیلی بزرگ است.

کد ۴۱۵: نوع رسانه پشتیبانی نمی شود، درخواست شامل نوع رسانه است که سرور یا منبع پشتیبانی نمی کند.

کد ۴۱۶: دامنه درخواستی صحیح نیست، درخواست شما برای یک بخشی از منبع ای است که سرور قادر به برگشت آن نیست. به عنوان مثال شما درخواست دامنه ۲۰۰۰ تا ۳۰۰۰ یک فایل ۱۰۲۴ بایتی را داده اید و به دلیل عدم وجود همچنین دامنه ای خطای ۴۱۶ از سمت سرور دریافت می شود:

HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */1000

کد ۴۱۷: Expectation Failed، زمانی که سرور از پارامتر هدر Expect پشتیبانی نکند و یا نوع آن را درک نکند این خطا رخ میدهد. یک مثال استفاده شده را در بررسی کد وضعیت ۱۰۰ مثال زدیم.

کد ۴۲۹: با عبارت Too many redirects متوجه می شویم که مرورگر در داخل یک حلقه ریدایرکت گیر افتاده و تعداد ریدایرکت از حد عادی فراتر رفته است. این اتفاق می تواند گاهی اوقات در زمانی که ربات ها و اسکریپت ها تلاش می کنند تا به سایت شما دسترسی یابند رخ دهد. گاهی این اتفاق با اشتباه در کد htaccess نیز ممکن است رخ دهد.

به عنوان مثال در زیر هدر پاسخ خطایی را با تعداد ۳۶۰۰ ریدایرکت را به ما گزاش می دهد:

HTTP/1.1 429 Too Many Requests
Content-type: text/html
Retry-After: 3600

کد وضعیت ۵۰۰

کدهای سطح ۵۰۰ که خطا هم در نظر گرفته می شوند. هر چند آنها مشکلی که روی سرور اتفاق افتاده را گزارش می دهند ولی رفع این خطاها همچنان مشکل است باشد.

کد ۵۰۰: خطایی روی سرور رخ داده و درخواست نمی تواند کامل شود. معنای ساده این کد به صورت کلی «خطای داخلی سرور» است. گاهی اوقات روی سرور اشتباهی رخ می دهد و منابع درخواست شده تحویل داده نمی شوند. این کد معمولا توسط افزونه هایی که روی سرور اضافه شده اند رخ می دهد، مثل فایل php مشکل دار یا حتی اشکال ارتباط با پایگاه داده.

کد ۵۰۱: این خطا زمانی رخ می دهد که سرور از عملکرد مورد نیاز برای اجرای درخواست پشتیبانی نمی کند. به عبارت دیگر یک پاسخ مناسب برای زمانی که سرور نمی تواند روش درخواست را تشخصیص دهد و نمی تواند از آن برای هیچ کدام از آدرس ها وفایل ها و منابع پشتیبانی کند. این مشکل تقریبا همیشه توسط خود میزبان و پشتیبانی فنی آن رفع می شود پس اگر به این مشکل خوردید حتما با پشتیبانی هاست خود تماس بگیرید.

کد ۵۰۲: عبارت Bad Gateway یا دروازه بد به این معنی است که سرور پاسخ اشتباه از دیگری دریافت کرده، به عنوان مثال وقتی از یک سرور پراکسی استفاده می شود. در زمان های دیگر یک کوئری یا درخواست طولانی مدت می شود و توسط سرور کنسل یا نابود می شود و ارتباط با دیتابیس به مشکل می خورد.

کد ۵۰۳: سرور برای اینکه این درخواست را انجام دهد فعلا در دسترس نیست. درخواست نمی تواند در این نقطه زمانی کامل شود. این کد ممکن است توسط یک سرور که تمام منابع آن اشغال شده و نمی تواند درخواست اضافه را اجرا کند برگردانده می شود.

کد ۵۰۴: سرور به عنوان یک گذرگاه عمل می کند و زمان انتظار سرور برای دریافت پاسخ از سرور دیگر به اتمام رسیده. این کد زمانی برگردانده می شود که دو سرور با مشارکت هم یک درخواست را انجام دهند و مدت زمان مورد انتظار سرور اول برای پاسخ از سرور دوم به پایان رسیده است.

کد ۵۰۵: نسخه HTTP پشتیبانی نمی شود. سرور نمیتواند نسخه HTTP کلاینت را برای انجام درخواست پشتیبانی کند.

کد ۵۱۱: شبکه نیاز به احراز هویت دارد. این کد وضعیت زمانی ارسال می شود که شبکه در حال تلاش برای استفاده از فرم احراز هویتی که قبلا باید به همراه درخواست با سرور ارسال شود. به عنوان مثال شما نیاز به موافقت برای شرایط و قوانین عمومی یک وایفای هاست اسپات نیاز دارید.

کد ۵۲۱: سرور در دسترس نیست. این خطای مخصوص کلودفلیر است. به این معنی که کلاینت یا مرورگر می تواند با موفقیت به سرور کلود فلیر متصل شوند اما سرور کلود فلیر نمی تواند به سرور اصلی متصل شود.

از کجا درباره کدهای وضعیت HTTP بیشتر مطالعه داشته باشیم؟

شناخت کدهای وضعیت می تواند به رفع برخی مشکلاتی که در وبسایت، مرورگر یا سرور بوجود می آند چه به عنوان یک توسعه دهنده و چه به عنوان مدیر سایت کمک کند.

خلاصه

هر چند که این کدها ممکن است به نظر گیج کننده به نظر برسند اما کدهای وضعیت HTTP خیلی پرمعنی و مفید هستند. با یادگیری کدهای رایج می توانید مشکلات سایت خود را به سرعت شناسایی و در جهت رفع آن اقدام کنید.

در این پست ما حدود ۴۰ کد وضعیت HTTP را معرفی کردیم. از کدهای سطح ۱۰۰ و ۲۰۰ که مشکل ایجاد نمی کنند تا کدهای ۴۰۰ و ۵۰۰ که می توانند مشکلات زیادی برای سئو، درآمد و اعتبار سایت ایجاد کنند. شناخت پیام این کدهای می تواند از مشکلات و ضرور مالی و اعتباری جلوگیری کند.

پکیج کامل آموزش بهینه سازی سایت برای موتور جستجو-SEO

منبع: کینستا