HTTP Durum Kodları Rehberi: 200, 301, 404, 500 Ne Anlama Gelir?
Ağ · · 8 dk okuma · Sorgulaa Editör Ekibi
Durum kodu nedir, neden önemlidir?
Tarayıcınız bir sayfa istediğinde sunucu yalnızca HTML göndermez; cevabın en başına üç haneli bir sayı koyar. Bu sayı, isteğin akıbetini özetleyen HTTP durum kodudur. Ziyaretçi çoğu zaman bu kodu görmez, ama tarayıcılar, arama motoru botları, CDN’ler, izleme sistemleri ve API istemcileri kararlarını ona bakarak verir: içerik önbelleğe alınsın mı, başka bir adrese gidilsin mi, sayfa dizinden çıkarılsın mı, istek biraz sonra yeniden denensin mi?
Bu yüzden durum kodu bir ayrıntı değil, sunucunuzun dış dünyayla konuştuğu dilin kendisidir. Ekranda “Aradığınız sayfa bulunamadı” yazıp arka planda 200 döndüren bir site, insana doğruyu, makineye yanlışı söylemiş olur. Bu rehber kodların mantığını, birbirine en çok karıştırılan çiftleri ve yanlış kod seçiminin arama görünürlüğüne etkisini ele alıyor.
Beş sınıf: ilk hane her şeyi söyler
Kodun ilk hanesi sınıfı belirler. Tanımadığınız bir kodla karşılaşsanız bile ilk haneye bakarak sorunun hangi tarafta olduğunu anlayabilirsiniz.
| Sınıf | Anlamı | Tipik örnekler |
|---|---|---|
| 1xx | Bilgilendirme; istek alındı, süreç devam ediyor | 100 Continue, 101 Switching Protocols |
| 2xx | Başarı; istek anlaşıldı ve yerine getirildi | 200 OK, 201 Created, 204 No Content |
| 3xx | Yönlendirme; istemcinin ek bir adım atması gerekiyor | 301, 302, 304, 307, 308 |
| 4xx | İstemci hatası; istek hatalı ya da karşılanamaz | 400, 401, 403, 404, 410, 429 |
| 5xx | Sunucu hatası; istek geçerli ama sunucu yerine getiremedi | 500, 502, 503, 504 |
Pratik ayrım şudur: 4xx “sen yanlış bir şey istedin”, 5xx “ben işimi yapamadım” demektir. Bir izleme panelinde 4xx artışı çoğunlukla kırık bağlantılara, botlara ya da hatalı istemci koduna; 5xx artışı ise doğrudan sizin altyapınıza işaret eder.
2xx: başarı kodlarının incelikleri
200 OK en sık görülen koddur ve “istediğin şey bu cevabın gövdesinde” anlamına gelir. 201 Created, genellikle bir POST isteğinin ardından yeni bir kaynağın oluşturulduğunu bildirir; API tasarımında kayıt ekleme işlemlerinin doğru cevabıdır. 204 No Content işlemin başarılı olduğunu ama döndürülecek bir gövde bulunmadığını söyler; silme ya da ayar kaydetme isteklerinde kullanılır. 206 Partial Content ise istemcinin dosyanın yalnızca bir aralığını istediği durumlarda görülür: video oynatıcıların ileri sarması ve yarıda kalan indirmelerin kaldığı yerden sürmesi bu kod sayesinde mümkündür.
3xx: 301 ile 302 arasındaki fark
Yönlendirme kodları, cevabın Location başlığında yeni adresi taşır. Aralarındaki fark iki soruya verilen cevaptadır: taşınma kalıcı mı, ve istek yöntemi korunacak mı?
| Kod | Süre | İstek yöntemi | Ne zaman kullanılır |
|---|---|---|---|
| 301 Moved Permanently | Kalıcı | İstemci POST’u GET’e çevirebilir | Alan adı değişikliği, HTTP’den HTTPS’e geçiş, kalıcı URL yapısı değişimi |
| 308 Permanent Redirect | Kalıcı | Yöntem ve gövde korunur | Kalıcı taşınan API uç noktaları, form adresleri |
| 302 Found | Geçici | İstemci POST’u GET’e çevirebilir | Kısa süreli kampanya sayfası, bakım sırasında geçici yönlendirme |
| 307 Temporary Redirect | Geçici | Yöntem ve gövde korunur | Geçici yönlendirmede POST verisinin kaybolmaması gerekiyorsa |
| 303 See Other | — | Her zaman GET’e çevrilir | Form gönderiminden sonra sonuç sayfasına yönlendirme |
301 ile 302 arasındaki seçim yalnızca teknik bir tercih değildir. Kalıcı yönlendirme, arama motoruna “eski adresi unut, sinyalleri yenisine aktar” mesajı verir; geçici yönlendirme ise “eski adres geçerliliğini koruyor, dizinde onu tut” der. Kalıcı bir taşınmada 302 kullanmak, yeni adresin dizine girmesini geciktirebilir. Tersi de risklidir: tarayıcılar 301’i agresif biçimde önbelleğe alır. Yanlışlıkla verdiğiniz bir 301’i sunucuda düzeltseniz bile, o adresi daha önce ziyaret etmiş kullanıcıların tarayıcısı eski yönlendirmeyi uzun süre uygulamaya devam edebilir. Emin olmadığınız bir yönlendirmeyi önce 302 ile denemek, doğrulandıktan sonra 301’e çevirmek güvenli bir alışkanlıktır.
Yönlendirme zincirleri
http://ornek.com.tr adresinin önce https://ornek.com.tr adresine, oradan https://www.ornek.com.tr adresine, oradan da sonu eğik çizgili sürüme gitmesi üç ayrı gidiş-dönüş demektir. Her halka gecikme ekler ve botların tarama bütçesini tüketir. İdeal olan, her eski adresin tek adımda nihai adrese varmasıdır. Zincirin kendine dönmesi durumunda ise tarayıcı “çok fazla yönlendirme” hatası verir; bu döngülerin klasik nedeni, CDN ile kaynak sunucunun HTTPS konusunda birbirini yönlendirmesidir.
304 Not Modified: yönlendirme olmayan 3xx
304 aslında bir önbellek cevabıdır. Tarayıcı elindeki kopyanın kimliğini (ETag) ya da tarihini If-None-Match veya If-Modified-Since başlığıyla sunucuya bildirir; içerik değişmemişse sunucu gövde göndermeden 304 döner ve tarayıcı elindeki kopyayı kullanır. Bant genişliğinden tasarruf sağlar ama yine de bir ağ turu gerektirir. Adında sürüm bilgisi taşıyan statik dosyalarda (örneğin stil-4f2a.css) uzun bir Cache-Control: max-age değeri vermek, bu turu da ortadan kaldırır.
4xx: istemci tarafındaki hatalar
- 400 Bad Request: İstek sözdizimi bozuk ya da sunucunun anlayamayacağı biçimde. Hatalı JSON, aşırı büyük çerezler tipik nedenlerdir.
- 401 Unauthorized: Kimlik doğrulaması gerekiyor ama yapılmamış ya da geçersiz. Adı yanıltıcıdır; aslında “kim olduğunu bilmiyorum” demektir.
- 403 Forbidden: Kim olduğunuz biliniyor olabilir ama bu kaynağa erişim izniniz yok. Dosya izinleri, IP kısıtlamaları ve güvenlik duvarı kuralları sık görülen nedenlerdir.
- 404 Not Found: Bu adreste bir kaynak yok. Geçici mi kalıcı mı olduğu konusunda bir şey söylemez.
- 405 Method Not Allowed: Adres var ama kullanılan yöntem (örneğin yalnızca GET kabul eden bir adrese POST) desteklenmiyor.
- 410 Gone: Kaynak bilerek ve kalıcı olarak kaldırıldı.
- 429 Too Many Requests: İstek sınırı aşıldı. Cevaptaki Retry-After başlığı ne kadar beklenmesi gerektiğini bildirir.
404 mü, 410 mu?
İkisi de sayfanın eninde sonunda dizinden çıkmasına yol açar; fark mesajın kesinliğindedir. 404 “bulamadım” der ve botlar adresi bir süre daha yoklamaya devam edebilir. 410 ise “kaldırdım, geri gelmeyecek” der ve daha net bir sinyaldir. Stoktan kalıcı olarak kalkmış ürünler, süresi dolmuş ilanlar gibi bilinçli silmelerde 410 anlamlıdır. Silinen sayfanın doğrudan karşılığı olan yeni bir sayfa varsa en iyi seçenek ikisi de değil, 301’dir. Ancak silinen her adresi toptan ana sayfaya yönlendirmek iyi bir fikir değildir; arama motorları bunu çoğunlukla aşağıda anlatılan yumuşak 404 olarak değerlendirir.
Yumuşak 404 (soft 404)
Sunucunun “sayfa bulunamadı” içeriğini 200 koduyla göndermesine yumuşak 404 denir. Tek sayfa uygulamalarında ve her isteği aynı dosyaya yönlendiren yapılandırmalarda sık görülür. Sonuç, binlerce anlamsız adresin geçerli sayfa gibi taranması ve tarama bütçesinin boşa harcanmasıdır. Özel tasarlanmış, kullanıcıya yol gösteren bir hata sayfası harikadır; yeter ki başlığında gerçekten 404 yazsın.
5xx: sunucu tarafındaki hatalar
- 500 Internal Server Error: Genel amaçlı “bir şey ters gitti” kodudur. Uygulama kodundaki yakalanmamış bir hata, bozuk bir yapılandırma dosyası ya da eksik bir bağımlılık nedeniyle oluşur. Gerçek neden kullanıcıya gösterilmez; sunucunun hata günlüğünde yazar.
- 502 Bad Gateway: Aradaki sunucu (ters vekil, yük dengeleyici, CDN) arkadaki uygulama sunucusundan geçersiz bir cevap aldı ya da ona hiç bağlanamadı. Uygulama sürecinin çökmüş olması tipik nedendir.
- 503 Service Unavailable: Sunucu şu anda isteği karşılayamıyor: aşırı yük ya da planlı bakım. Geçici olduğunu ima eder.
- 504 Gateway Timeout: Aradaki sunucu arkadakine bağlandı ama belirlenen sürede cevap alamadı. Yavaş veritabanı sorguları ve uzun süren dış servis çağrıları klasik nedenlerdir.
502 ile 504 arasındaki farkı bilmek teşhisi hızlandırır: 502’de arka uç büyük olasılıkla ayakta değildir, 504’te ayaktadır ama yetişememektedir.
Planlı bakımda doğru kod 503 ve beraberinde bir Retry-After başlığıdır. Bakım sayfasını 200 ile sunarsanız botlar “bakımdayız” metnini sayfanın yeni içeriği sanabilir; 404 ile sunarsanız sayfalarınızın silindiğini düşünebilir. 503 ise “sonra tekrar gel” demektir ve kısa süreli kullanımda dizindeki durumunuzu korur. Günlerce süren 5xx hataları ise farklıdır: botlar tarama hızını düşürür ve sorun devam ederse sayfalar dizinden düşmeye başlayabilir.
Durum kodunu kendiniz nasıl kontrol edersiniz?
- Tarayıcı geliştirici araçları: Ağ (Network) sekmesini açıp sayfayı yenileyin. Her isteğin kodu, yönlendirme halkaları ve cevap başlıkları görünür. Önbelleğin sizi yanıltmaması için “önbelleği devre dışı bırak” seçeneğini işaretleyin.
- Komut satırı: curl -I https://ornek.com.tr komutu yalnızca başlıkları getirir. -L eklerseniz yönlendirme zincirinin her halkasını sırayla görürsünüz.
- Dışarıdan bakış: Kendi ağınızdan her şey yolunda görünürken dışarıdan farklı bir cevap dönebilir. Sorgulaa’nın HTTP başlık sorgulama aracı gibi çevrimiçi bir denetleyici, sunucunuzun üçüncü bir gözle nasıl göründüğünü gösterir.
- Sunucu günlükleri: Erişim günlüğü her isteğin kodunu kaydeder. Kodlara göre gruplamak, hangi adreslerin 404 ya da 500 ürettiğini bir bakışta ortaya çıkarır.
- Arama motoru panelleri: Web yöneticisi araçlarındaki tarama raporları, botların sitenizde hangi hatalarla karşılaştığını doğrudan gösterir.
Kontrol ederken farklı sürümleri ayrı ayrı deneyin: http ve https, www’li ve www’siz, sonunda eğik çizgi olan ve olmayan adres. Bunlardan yalnızca biri 200 dönmeli, diğerleri tek adımda ona yönlenmelidir.
Sık yapılan hatalar
- Hata sayfasını 200 ile sunmak: Yumuşak 404’ün kaynağıdır. Hata sayfası şablonunun doğru kodu gönderdiğini mutlaka başlıklardan doğrulayın.
- Kalıcı taşınmada 302 kullanmak: Birçok çatı ve eklentinin varsayılan yönlendirmesi 302’dir. Alan adı ya da URL yapısı değişikliğinde kodu açıkça 301 olarak belirtin.
- Yönlendirmeyi JavaScript ya da meta etiketle yapmak: Sunucu tarafında yapılabiliyorsa gerçek bir 3xx cevabı her zaman daha hızlı ve daha nettir.
- Silinen her sayfayı ana sayfaya yönlendirmek: Kullanıcıyı şaşırtır, arama motoruna da anlamlı bir sinyal vermez. Karşılığı olan sayfayı karşılığına yönlendirin, olmayanı 404 ya da 410 ile bırakın.
- Bakımı 200 ya da 404 ile duyurmak: Doğrusu 503 ve Retry-After’dır.
- API’de her şeye 200 dönüp hatayı gövdeye yazmak: İstemci kütüphaneleri, izleme araçları ve önbellekler koda bakar. Hata durumunda 200 dönmek, hataların izleme sisteminde görünmez olmasına yol açar.
- 401 ile 403’ü karıştırmak: Oturum açmamış kullanıcıya 401, oturum açmış ama yetkisi olmayana 403 uygundur. İstemci uygulaması bu ayrıma göre giriş ekranı mı, “yetkiniz yok” mesajı mı göstereceğine karar verir.
- 5xx hatalarında yalnızca ön yüze bakmak: Kullanıcıya gösterilen sayfa nedeni söylemez. İlk durak her zaman sunucunun ve uygulamanın hata günlüğüdür.
Özetle: durum kodu, sayfanızın makinelere söylediği ilk cümledir. Doğru kodu seçmek çoğu zaman tek satırlık bir ayardır, ama yanlış kodun bedeli kaybolan sıralamalar, şişen tarama raporları ve teşhisi zorlaşan arızalar olarak geri döner. Önemli bir değişiklikten sonra birkaç kritik adresin başlıklarına bakmayı alışkanlık hâline getirmek, bu sorunların büyük bölümünü daha ortaya çıkmadan yakalar.