İçeriğe geç
Utilerio

HTTP Durum Kodları: Eksiksiz Rehber

100'den 511'e kadar tüm yaygın HTTP durum kodları, sınıflarına göre gruplanmış; her birinin ne anlama geldiği ve sunucunun ne zaman gönderdiği sade bir dille anlatılıyor.

· 7 dk okuma

Her HTTP yanıtı, istemciye ne olduğunu tek bir sayıyla anlatan üç haneli bir durum kodu ile başlar: istek işe yaradı mı, bir yönlendirme mi oldu, istemci mi hata yaptı, yoksa sunucu mu başarısız oldu? İlk hane sınıfı belirler:

SınıfAnlamı
1xxBilgilendirici — istek hâlâ işleniyor
2xxBaşarı — istek çalıştı
3xxYönlendirme — istemcinin başka bir yere bakması gerekiyor
4xxİstemci hatası — sorun isteğin kendisinde
5xxSunucu hatası — sunucu geçerli bir isteği yerine getiremedi

Bu yazının geri kalanı, karşılaşma ihtimaliniz yüksek her kod için bir arama tablosu ve pratikte insanların gerçekten kafasını karıştıran ayrımlar.

1xx — Bilgilendirici

KodAdNe anlama gelir
100Continueİsteğin ilk kısmı alındı; istemci gövdeyi göndermeye devam etmeli.
101Switching ProtocolsSunucu, Upgrade başlığıyla istenen protokol değişimini kabul eder (ör. WebSocket'e geçiş).
103Early HintsSunucu asıl yanıtı hazırlarken istemcinin kaynakları önceden yüklemeye başlamasını sağlar.

2xx — Başarı

KodAdNe anlama gelir
200OKİstek başarılı oldu. Tam anlamı yönteme göre değişir: GET bir kaynak döner, POST bir işlemin sonucunu döner.
201Createdİstek başarılı oldu ve genellikle bir POST veya PUT sonucunda yeni bir kaynak oluşturuldu.
202Acceptedİstek işlenmek üzere kabul edildi, ancak işlem henüz tamamlanmadı.
204No Contentİstek başarılı oldu ama dönecek bir gövde yok — genellikle başarılı bir DELETE sonrasında görülür.
206Partial ContentRange başlığına yanıt olarak kaynağın yalnızca bir bölümü döndürülüyor — devam ettirilebilir indirmelerde ve video akışında kullanılır.

3xx — Yönlendirme

KodAdNe anlama gelir
300Multiple Choicesİsteğin birden fazla olası yanıtı var; istemci (veya kullanıcı) birini seçmeli.
301Moved PermanentlyKaynak, Location başlığında verilen yeni bir URL'ye kalıcı olarak taşındı. Arama motorları sıralamayı yeni URL'ye devreder.
302FoundKaynak geçici olarak farklı bir URL'de bulunuyor. 301'den farklı olarak kalıcı kabul edilip önbelleğe alınmamalı.
303See OtherYanıt, orijinal yöntemden bağımsız olarak GET ile başka bir URL'de bulunabilir — klasik post-redirect-get deseni.
304Not Modifiedİstemcide zaten bulunan önbellek sürümü hâlâ geçerli; gövde gönderilmez.
307Temporary Redirect302 gibidir, ancak yeni istekte yöntem ve gövdenin aynen tekrarlanacağını garanti eder.
308Permanent Redirect301 gibidir, ancak yeni istekte yöntem ve gövdenin aynen tekrarlanacağını garanti eder.

4xx — İstemci Hatası

KodAdNe anlama gelir
400Bad RequestSunucu, hatalı sözdizimi, geçersiz JSON veya yanlış parametreler gibi bir istemci hatası nedeniyle isteği işleyemiyor.
401UnauthorizedKimlik doğrulama gerekli veya başarısız oldu. İsminin aksine, bu kim olduğunuzla ilgilidir, neye izniniz olduğuyla değil.
402Payment RequiredGelecekte kullanım için ayrılmıştır; bazı API'ler bunu faturalama veya kota aşımı hataları için kullanır.
403ForbiddenSunucu isteği anladı ama yetkilendirmeyi reddediyor — yeniden kimlik doğrulamak yardımcı olmaz.
404Not FoundSunucu istenen kaynağı bulamıyor. Web'in en tanınan durum kodu.
405Method Not AllowedKaynak mevcut ancak kullanılan HTTP yöntemini desteklemiyor (ör. yalnızca okunabilir bir uç noktada DELETE).
406Not AcceptableSunucuda Accept başlıklarının istediği ile eşleşen bir gösterim yok.
408Request TimeoutSunucu isteği beklerken zaman aşımına uğradı; istemci basitçe yeniden deneyebilir.
409Conflictİstek, kaynağın mevcut durumuyla çakışıyor — eşzamanlı düzenlemelere verilen yaygın bir yanıt.
410GoneKaynak eskiden vardı ama kalıcı olarak kaldırıldı, yönlendirme adresi de yok.
411Length RequiredContent-Length belirtilmediği için sunucu isteği reddediyor.
412Precondition FailedIf-Match veya If-Unmodified-Since gibi bir başlıktaki koşul sağlanmadı.
413Payload Too Largeİstek gövdesi, sunucunun kabul etmeye istekli olduğu sınırı aşıyor.
414URI Too Longİstenen URL, sunucunun yorumlamaya istekli olduğundan daha uzun.
415Unsupported Media Typeİstek gövdesinin formatı desteklenmiyor, genellikle yanlış bir Content-Type başlığından kaynaklanır.
416Range Not SatisfiableRange başlığı, kaynağın sahip olmadığı bir bayt aralığını istiyor.
417Expectation FailedSunucu, Expect istek başlığının gereksinimlerini karşılayamıyor.
418I'm a TeapotRFC 2324'ten bir 1 Nisan şakası — bazı sunucular bunu bilerek bir kolay yumurta olarak kullanır.
422Unprocessable Contentİstek biçimsel olarak doğru ama anlamsal olarak geçersiz — başarısız doğrulama kurallarına klasik yanıt.
425Too EarlySunucu, tekrar oynatılabilecek bir isteği işleme riskini almak istemiyor.
429Too Many Requestsİstemci belirli bir sürede çok fazla istek gönderdi — hız sınırlama. Genellikle bir Retry-After başlığı eşlik eder.
431Request Header Fields Too Largeİsteğin başlık alanları, sunucunun işleyemeyeceği kadar büyük.
451Unavailable For Legal ReasonsKaynak, devlet kaynaklı bir içerik engeli gibi yasal bir talep nedeniyle sunulmuyor.

5xx — Sunucu Hatası

KodAdNe anlama gelir
500Internal Server ErrorGenel bir yakalayıcı: sunucuda bir şeyler ters gitti ve daha spesifik bir kod geçerli değil.
501Not ImplementedSunucu, isteği yerine getirmek için gereken işlevselliği desteklemiyor.
502Bad GatewayAğ geçidi veya proxy olarak çalışan sunucu, üst akış sunucusundan geçersiz bir yanıt aldı.
503Service UnavailableSunucu geçici olarak isteği işleyemiyor — aşırı yüklenmiş ya da bakımda.
504Gateway TimeoutAğ geçidi olarak çalışan sunucu, üst akış sunucusundan zamanında yanıt alamadı.
505HTTP Version Not SupportedSunucu, istekte kullanılan HTTP protokol sürümünü desteklemiyor.
507Insufficient StorageSunucu, isteği tamamlamak için gereken gösterimi depolayamıyor (WebDAV).
511Network Authentication Requiredİstemcinin ağ erişimi kazanması için kimlik doğrulaması yapması gerekiyor — genellikle halka açık Wi-Fi'deki karşılama sayfalarında görülür.

Gerçekten önemli olan ayrımlar

401 ile 403. 401, kim olduğunuzu henüz kanıtlamadığınız anlamına gelir — eksik veya geçersiz kimlik bilgisi. 403 ise sunucunun kim olduğunuzu tam olarak bildiği ve izniniz olmadığına karar verdiği anlamına gelir. Tekrar giriş yapmak bir 401'i çözer; bir 403 için hiçbir işe yaramaz.

404 ile 403 ile 400. API'niz çalışmasını beklediğiniz bir istek için 404 döndürüyorsa, bir yetki sorunu (bu 403 olurdu) yerine yoldaki bir yazım hatasını, sondaki eğik çizgi uyuşmazlığını veya kayıtlı olmayan bir rotayı kontrol edin. URL doğru ama bir parametre hatalıysa, bu 404 değil 400'dür.

Hangi yönlendirme kullanılmalı. Arama motorlarının takip edip yeni URL altında yeniden indekslemesi gereken kalıcı bir taşıma için 301. Geçici bir taşıma için 302 veya 307. Bir sonraki istekte POST'u GET'e çevirmek için özellikle 303 — sayfa yenilendiğinde form tekrar gönderimini engelleyen post-redirect-get deseninin arkasındaki mantık budur.

409 ile 422. 409, kaynağın mevcut durumuyla ilgili bir çakışmadır — biri aynı satırı önce düzenlemiştir. 422 ise isteğin kendi başına geçersiz olmasıdır — zorunlu bir alan eksiktir, bir değer doğrulama kuralını geçemez — eşzamanlı olarak başka bir şeyin olup olmamasından bağımsızdır.

Çalışırken bir durum kodunu aramak

Beklenmedik bir yönlendirme zinciri döndüren bir URL'yi incelemeniz ya da hatalı durum kodunu aramaya başlamadan önce bir isteği bileşenlerine ayırmanız gerekiyorsa, URL Ayrıştırıcı herhangi bir URL'yi protokolüne, host'una, yoluna ve sorgu parametrelerine böler. Peşinde olduğunuz kod bir router veya middleware'in bir rotayı eşleştirmek (ya da eşleştirememek) için kullandığı bir düzenli ifadeden geliyorsa, Regex Test aracı sunucu loglarını kurcalamaya başlamadan önce o kalıbı gerçek yollara karşı test etmenizi sağlar.