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ıf | Anlamı |
|---|---|
| 1xx | Bilgilendirici — istek hâlâ işleniyor |
| 2xx | Başarı — istek çalıştı |
| 3xx | Yönlendirme — istemcinin başka bir yere bakması gerekiyor |
| 4xx | İstemci hatası — sorun isteğin kendisinde |
| 5xx | Sunucu 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
| Kod | Ad | Ne anlama gelir |
|---|---|---|
| 100 | Continue | İsteğin ilk kısmı alındı; istemci gövdeyi göndermeye devam etmeli. |
| 101 | Switching Protocols | Sunucu, Upgrade başlığıyla istenen protokol değişimini kabul eder (ör. WebSocket'e geçiş). |
| 103 | Early Hints | Sunucu asıl yanıtı hazırlarken istemcinin kaynakları önceden yüklemeye başlamasını sağlar. |
2xx — Başarı
| Kod | Ad | Ne anlama gelir |
|---|---|---|
| 200 | OK | İ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. |
| 201 | Created | İstek başarılı oldu ve genellikle bir POST veya PUT sonucunda yeni bir kaynak oluşturuldu. |
| 202 | Accepted | İstek işlenmek üzere kabul edildi, ancak işlem henüz tamamlanmadı. |
| 204 | No 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. |
| 206 | Partial Content | Range 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
| Kod | Ad | Ne anlama gelir |
|---|---|---|
| 300 | Multiple Choices | İsteğin birden fazla olası yanıtı var; istemci (veya kullanıcı) birini seçmeli. |
| 301 | Moved Permanently | Kaynak, Location başlığında verilen yeni bir URL'ye kalıcı olarak taşındı. Arama motorları sıralamayı yeni URL'ye devreder. |
| 302 | Found | Kaynak geçici olarak farklı bir URL'de bulunuyor. 301'den farklı olarak kalıcı kabul edilip önbelleğe alınmamalı. |
| 303 | See Other | Yanıt, orijinal yöntemden bağımsız olarak GET ile başka bir URL'de bulunabilir — klasik post-redirect-get deseni. |
| 304 | Not Modified | İstemcide zaten bulunan önbellek sürümü hâlâ geçerli; gövde gönderilmez. |
| 307 | Temporary Redirect | 302 gibidir, ancak yeni istekte yöntem ve gövdenin aynen tekrarlanacağını garanti eder. |
| 308 | Permanent Redirect | 301 gibidir, ancak yeni istekte yöntem ve gövdenin aynen tekrarlanacağını garanti eder. |
4xx — İstemci Hatası
| Kod | Ad | Ne anlama gelir |
|---|---|---|
| 400 | Bad Request | Sunucu, hatalı sözdizimi, geçersiz JSON veya yanlış parametreler gibi bir istemci hatası nedeniyle isteği işleyemiyor. |
| 401 | Unauthorized | Kimlik doğrulama gerekli veya başarısız oldu. İsminin aksine, bu kim olduğunuzla ilgilidir, neye izniniz olduğuyla değil. |
| 402 | Payment Required | Gelecekte kullanım için ayrılmıştır; bazı API'ler bunu faturalama veya kota aşımı hataları için kullanır. |
| 403 | Forbidden | Sunucu isteği anladı ama yetkilendirmeyi reddediyor — yeniden kimlik doğrulamak yardımcı olmaz. |
| 404 | Not Found | Sunucu istenen kaynağı bulamıyor. Web'in en tanınan durum kodu. |
| 405 | Method Not Allowed | Kaynak mevcut ancak kullanılan HTTP yöntemini desteklemiyor (ör. yalnızca okunabilir bir uç noktada DELETE). |
| 406 | Not Acceptable | Sunucuda Accept başlıklarının istediği ile eşleşen bir gösterim yok. |
| 408 | Request Timeout | Sunucu isteği beklerken zaman aşımına uğradı; istemci basitçe yeniden deneyebilir. |
| 409 | Conflict | İstek, kaynağın mevcut durumuyla çakışıyor — eşzamanlı düzenlemelere verilen yaygın bir yanıt. |
| 410 | Gone | Kaynak eskiden vardı ama kalıcı olarak kaldırıldı, yönlendirme adresi de yok. |
| 411 | Length Required | Content-Length belirtilmediği için sunucu isteği reddediyor. |
| 412 | Precondition Failed | If-Match veya If-Unmodified-Since gibi bir başlıktaki koşul sağlanmadı. |
| 413 | Payload Too Large | İstek gövdesi, sunucunun kabul etmeye istekli olduğu sınırı aşıyor. |
| 414 | URI Too Long | İstenen URL, sunucunun yorumlamaya istekli olduğundan daha uzun. |
| 415 | Unsupported Media Type | İstek gövdesinin formatı desteklenmiyor, genellikle yanlış bir Content-Type başlığından kaynaklanır. |
| 416 | Range Not Satisfiable | Range başlığı, kaynağın sahip olmadığı bir bayt aralığını istiyor. |
| 417 | Expectation Failed | Sunucu, Expect istek başlığının gereksinimlerini karşılayamıyor. |
| 418 | I'm a Teapot | RFC 2324'ten bir 1 Nisan şakası — bazı sunucular bunu bilerek bir kolay yumurta olarak kullanır. |
| 422 | Unprocessable Content | İstek biçimsel olarak doğru ama anlamsal olarak geçersiz — başarısız doğrulama kurallarına klasik yanıt. |
| 425 | Too Early | Sunucu, tekrar oynatılabilecek bir isteği işleme riskini almak istemiyor. |
| 429 | Too 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. |
| 431 | Request Header Fields Too Large | İsteğin başlık alanları, sunucunun işleyemeyeceği kadar büyük. |
| 451 | Unavailable For Legal Reasons | Kaynak, devlet kaynaklı bir içerik engeli gibi yasal bir talep nedeniyle sunulmuyor. |
5xx — Sunucu Hatası
| Kod | Ad | Ne anlama gelir |
|---|---|---|
| 500 | Internal Server Error | Genel bir yakalayıcı: sunucuda bir şeyler ters gitti ve daha spesifik bir kod geçerli değil. |
| 501 | Not Implemented | Sunucu, isteği yerine getirmek için gereken işlevselliği desteklemiyor. |
| 502 | Bad Gateway | Ağ geçidi veya proxy olarak çalışan sunucu, üst akış sunucusundan geçersiz bir yanıt aldı. |
| 503 | Service Unavailable | Sunucu geçici olarak isteği işleyemiyor — aşırı yüklenmiş ya da bakımda. |
| 504 | Gateway Timeout | Ağ geçidi olarak çalışan sunucu, üst akış sunucusundan zamanında yanıt alamadı. |
| 505 | HTTP Version Not Supported | Sunucu, istekte kullanılan HTTP protokol sürümünü desteklemiyor. |
| 507 | Insufficient Storage | Sunucu, isteği tamamlamak için gereken gösterimi depolayamıyor (WebDAV). |
| 511 | Network 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.

