HTTP durum kodları aslında interneti deneyimleyen herkesin çeşitli durumlarda karşılaştığı bir kavramdır. Başarılı ya da başarısız olarak internet ortamından aldığımız her geri dönüşte bir durum kodu bizi karşılar. 

İnternet ortamında bilgisayarın karşısında olan ve bir web sitesini ziyaret eden herkes, bir siteden istekte bulunduğu için İstemci konumundadır. Bu istek bazen bir bilgi ya da araştırma durumunda olduğumuz her şey için olabilir. 

Bunun yanında bizim isteklerimize cevap veren ve bize hem görsel hemde yapısal bir web sitesi sunan taraf ise Sunucu durumunda olur. İnternetteki her adım bu iki taraf arasındaki karşılıklı iletişimin durumlarına göre gerçekleşir. İletişim halinde alınan geri dönüşlerin durumu ise bize HTTP durum kodları olarak yansımış olur. 

HTTP durum kodları her iki taraf içinde oldukça önemlidir. Çünkü bir sorunun çözülmesi için öncelikle onun bilinmesi gerekir. İnternetin sınırsız akışında en hızlı karşılığı bulabilmek ve SEO anlamında bir fark oluşturabilmek için HTTP durum kodlarının yorumlanması ve nihayetinde çözülmesi büyük önem taşır. Sunucu ve İstemci tarafı karşılaştığı kodlara göre gerekli işlemleri vakit kaybetmeden yerine getirebilir. 

Genellikle başarız durumlarda karşımıza çıkan ancak başarılı durumlarda da arka planda gerçekleşebilen bu durum kodları 3 hanelidir ve 5 ana gruba ayrılır. 

Şimdi bunları inceleyebiliriz; 

 

BİLGİLENDİRİCİ DURUM KODLARI (100-199)

1xx durumunda olan durum kodları sunucu tarafında işlerin yolunda olduğunu bildiren ve bu konuda istemciye bilgi ulaştıran kodlardır. 

100 (Continue) :  İsteğin başarıyla alındığını ve iletişime devam edileceğini belirtir. 

101 (Switching Protocols) : Anahtarlama protokolüdür. Sunucunun, istemciden gelen protokol değiştirme isteğine tabii olacağını belirtir. 

102 (Processing) : Sunucu tarafın isteği aldığını, işe koyulduğunu ancak bir geri dönüşe hazır olmadığını belirtir. 

 

 

BAŞARILI HTTP DURUM KODLARI (200-299) 

2xx halinde karşılaştığımız durum kodları bize içinde bulunduğumuz durumun başarılı olduğuna dair bilgilendirmeler içerir. 

200 (OK) : Karşılıklı iletişimde isteğin başarılı alındığını ve aynı şekilde cevabında başarılı bir şekilde döndürüldüğünü belirtir. 

201 (Created) : İsteğin başarılı olmasının yanında bunun için bir kaynağında yaratıldığını da gösterir. Bu durum kodunda sunucuya gönderilen kaynağı tanımladığı için genellikle bir POST isteği ile birlikte varolur. 

202 (Accepted) : İstemcinin sunucuda bir şeyi yaratma talebinin kabul edildiği anlamına gelir. Ancak istekte bulunulan durum henüz tam olarak yaratılmamıştır ve biraz daha işlem süresi gerekmektedir. 

203 (Non-Authoritative Information) : Yetersiz bilgi durumunda görülen durum kodudur. Durum başarılıdır ancak sunucudan istenen bilgi başka bir kaynaktan döndürülmüş olabilir. 

204 (No Content) : İstek başarılıdır ancak döndürülen herhangi bir içerik yoktur. 

205 (Reset Content) :  İstek başarılıdır ancak geriye herhangi bir içerik döndürülememiştir. Bu nedenlede içerik temizlenecektir. (Örneğin bir formda doldurulan bilgilerin silinip baştan istenmesi gibi.)

206 (Partial Content) : GET isteğiyle istek yapılan içeriğin berlirli bir parçası başarılı bir şekilde döndürülmüştür. 

207 (Multi-Status)

208 (Content Different)

 

 

YÖNLENDİRME HTTP DURUM KODLARI (300-399) 

3xx ile başlayan durum kodları istekte bulunulan kaynağın başka bir kaynağa taşındığını ve bundan dolayıda yönlendirmenin gerektiğini belirten durumlardır. 

300 (Multiple Choices) : Sunucuda istenenden çok daha fazla seçenek olduğunu belirtir. Sunucu bu durumda seçeneği kendisi seçebilir ya da bir seçenek listesi oluşturabilir. 

301 (Moved Permanently) : Bir kaynağın kalıcı olarak bir yere taşındığını bildirir ve oraya yönlendirme sağlar. 

302 (Moved Temporarily) : Bir kaynağın kalıcı olarak değilde geçici bir süreyle taşındığını bildirir. Yönlendirme sağlanır ancak kaynağın ana adresi henüz değiştirilmemiştir. 

303 (See Other) : Talep edilen isteğin o kaynakta olmadığını belirtir. Farklı bir kaynağa GET yapılması gerektiğini tavsiye eder. 

304 (Not Modified) : Önceden istek yapılmış ve geri dönüş alınmış bir kaynağa tekrar istek yapıldığında zaten hiçbir değişikliğin olmadığını söyler ve içerik döndürmez. 

305 (Use Proxy) : Sunucu tarafından döndürlen Proxy'nin kullanılması gerektiğini söyleyen durum kodudur. (Güvenlik nedeniyle artık kullanılmamaktadır.)

307 (Temporary Redirect) : Geçici bir yönlendirme söz konusudur. İstenen kaynak geçici olarak başka bir URL'e taşındığını belirtir. İstemci ana kaynağı kullanmaya devam eder. 

Bu durum kodunun 302'den farkı istek yönteminin yeniden yönlendirme sırasında değiştirilmemesi garanti edilir. 

308 (Permanent Redirect) : Kaynakta artık kalıcı bir URL vardır. 301 gibi çalışır ancak onun aksine yeniden yönlendirme sırasında istek yöntemi değiştirilmez. 

 

İSTEMCİ HATA HTTP DURUM KODLARI (400-499)

4xx ile başlayan durum kodlarında istemci tarafından gönderilen istekle ilgili bir hatanın oluştuğu bildirilir. 

400 (Bad Request) : Yapılan isteğin yapısının hatalı olduğunu bildirir. 

401 (Unauthorized) : İstek için kimlik doğrulaması gerektiğini belirtir. Yetkilendirme söz konusudur. 

402 (Payment Required) : Ödeme gereken durumlarda bildirelen durum kodudur. 

403 (Forbidden) : Geçerli bir verinin mevcut olduğu ancak kaynağa ulaşımın yasaklandığını belirtir. Böyle bir durumda kullanıcı yetkisiz sayıldığı için işlemi tekrarlamak durumu değiştirmez. 

404 (Not Found) : İstekte bulunulan kaynak sunucu tarafından bulunamamıştır. Geçici bir sorun bu duruma sebep olabilir o yüzden tekrar deneme yapıldığında durumun çözülebilmiş olması muhtemeldir. 

405 (Method Not Allowed) : Gönderilen yöntemin sunucu tarafından tanındığında desteklenmediği anlamına gelir. Örneğin kaynak bir GET ve POST yöntemi beklerken istemci DELETE veya PUT yöntemiyle kaynağa başvurursa hata 405 koduna düşer. 

406 (Not Acceptable) : İstemcinin Accept başlığında verilen özellik karşılanmadığı için kabul edilmemiştir. 

407 : Proxy sunucusunda login olmanın gerektiğini söyler. Proxy üzerinden bir yetkilendirme yapılmalıdır. 

408 : İstek zaman aşımına uğradığında bildirilir. Verilen zamanda isteğin işlenilmediğini belirtir. 

409 (Conflict) : İstek içerisinde hatların çakışması ve çelişki olduğu durumlarda bildirilir. 

410 (Gone) : İstenen kaynağın artık mevcut olmadığını belirtir. 404'te ki durumun aksine deneme ile artık yanıt alınamaz yani durum kalıcıdır. 

411 (Length Required) : İstekte içeriğin boyutu belirtilmediğinde verilen dönüştür. 

412 (Precondition Failed) : Sunucu, istekte bulunan bazı önkoşulları karşılamıyorsa bu hata verilir. 

413 (Request Entitiy Too Large) : İsteğin boyutu çok büyük olduğu için işlenemediğini belirtir. 

414 (Request-URI Too Long) : URL fazla büyüktür. 

416 (Requested Range Unsatifiable) : İstenilen kaynak istekte bulunulan medya tipini desteklemiyordur. 

417 (Expectation Failed) : İstek yapılan parça sunucu tarafından verilebilir durumdadır ya da uygun değildir. 

418 (I'm a Teapot) : En eğlenceli durum kodudur denilebilir. 1998 yılında tanımlanan bu durum kodunun karşılığı "Sunucunun kalıcı bir çaydanlık olduğunu ve bundan dolayı kahve demlemeyi reddettiği" anlamına gelir. 

429 (Too Many Request) : Belirlenen zaman dilimi içerisinde çok fazla istek olduğunu belirtir. Bu hatada, istemci yeniden denemeden önce ne kadar süre beklemesi gerektiği gösterilebilir. Hız sınırlama stratejileri için kullanılmaktadır. 

 

SUNUCU HATA HTTP DURUM KODLARI (500-599)

5xx durum kodları istemcinin isteğinin başarılı olduğunu ancak sunucu tarafında bazı sorunlar nedeniyle geri dönüşün yapılamadığını belirtir. 

500 (Internal Server Error) : İsteği tamamlayamamasına neden olan beklenmedik bir durumla karşılaşıldığı anlamına gelir. Kullanıcı bu durum kodunu göremez, işlem arka planda gerçekleşir. 

501 (Not Implemented) : Sunucu kendisine gönderilen isteği tamamlamak için gereken gereksinimlere sahip değildir ya da desteklememektedir. İstemcinin ulaşmaya çalıştığı sunucunun düzeltilmesi ve geliştirilmesi gerekir. 

502 (Bad Gateway) : Sunucunun proxy olarak hareket ettiği zamanda istekte bulunurken sunucudan geçersiz bir yanıt alındığını gösterir. 

503 (Service Unavailable) : Geçici bir duruma işaret eder. Sunucuya yapılan istek şu an da gerçekeleştirilememektedir. Bu durum bakım ya da sunucunun aşırı yüklemede olmasından dolayı kaynaklanabilir. 

504 (Gateway Timeout) : Sunucu proxy gibi davranırken, isteğin beklenen zaman aralığında gönderilmediğine işaret eder. Bu düzeltme sunucudan gelmelidir. 

Sonuç olarak yukarıda listelediğimiz durum kodları bizim internette daha güvenli ve etkin iletişimlerde bulunmamızı sağlar. Hem kullanıcı hem geliştirici için yapıcı özelliği bulunan bu durum kodlarını takip etmek ve sorunları dinlemek önemlidir.

İngilizce kaynak olarak geri kalan tüm HTTP kodlarına aşağıdaki linktende ulaşabilirsiniz. 

https://datatracker.ietf.org/doc/html/rfc7231#section-6.6.1