HTTP durum kodları, arıza aramanın en hızlı kısayoludur — doğru okunduğunda. Yanlış okunduğunda ise saatlerce yanlış katmanda arama yapılmasına yol açar. Fark, kodun kimin şikâyet ettiğini söylediğini bilmekten geçer.
Sınıfların anlamı
Kodun ilk hanesi, sorumluluğun nerede olduğunu söyler.
2xx başarıdır. 3xx yönlendirmedir. 4xx, isteğin kendisinde bir sorun olduğunu söyler — yani istemci tarafında. 5xx, sunucunun isteği yerine getiremediğini söyler.
Bu ayrım, ilk elemeyi yapar: 4xx alıyorsanız sunucu çalışıyordur ve istekle ilgilenmiştir; sorun istekte ya da yetkidedir.
502 ile 504: en kritik ayrım
İkisi de öndeki katmanın ürettiği hatalardır ve tamamen farklı şeyleri anlatır. Ayrımı bilmek, teşhisi dakikalara indirir.
502, öndeki sunucunun arka uçtan geçersiz bir yanıt aldığını söyler. Genelde arka uç çökmüştür, hiç çalışmıyordur ya da bağlantı reddedilmiştir.
504, arka uca ulaşıldığını ama zamanında yanıt gelmediğini söyler. Uygulama ayaktadır; yavaştır ya da takılmıştır.
İkisinin çözümü zıttır. 502’de uygulamanın neden ayakta olmadığına bakılır: süreç çökmüş mü, soket dosyası yerinde mi, izinler doğru mu.
504’te uygulamanın neden yavaş olduğuna bakılır: takılı bir veritabanı sorgusu, dış bir servisin yanıt vermemesi, tükenmiş bir bağlantı havuzu. Yavaş sorgu tarafı yavaş sorgu: indeks eklemeden önce yazısında.
Bir de yapılandırma kaynaklı 504 vardır: uygulama işini bitirmiştir ama vekilin bekleme süresi kısa ayarlanmıştır. Ayrıntısı ters vekil nedir yazısında.
500: en az bilgi veren kod
500, “beklenmedik bir şey oldu” demektir ve tek başına hiçbir şey söylemez.
Değeri, sunucu günlüğünde karşılığı olmasındadır. Kullanıcıya gösterilen 500 sayfasının arkasında, hata günlüğünde bir yığın izi vardır.
Bu yüzden 500 gördüğünüzde yapılacak ilk şey ekranı değil günlüğü okumaktır; yöntemi erişim günlüğü okumak yazısında.
Kullanıcıya ayrıntılı hata gösterilmemesi ise ayrı bir kuraldır: yığın izi, sistem hakkında saldırgana bilgi verir.
401 ile 403
Sık karıştırılır ve karışıklık, kullanıcıya yanlış mesaj gösterilmesine yol açar.
401, “kim olduğunuzu bilmiyorum” demektir. Kimlik doğrulama yapılmamıştır ya da oturum sona ermiştir. Doğru davranış, kullanıcıyı giriş ekranına yönlendirmektir.
403, “kim olduğunuzu biliyorum ama buna yetkiniz yok” demektir. Giriş ekranına yönlendirmek burada anlamsızdır — kullanıcı zaten giriş yapmıştır.
Yetki modelinin nasıl kurulacağı en az yetki ilkesi yazısında.
Bir de gizleme tercihi vardır: bazı sistemler yetkisiz erişimde bilerek 404 döndürür, kaynağın varlığını bile açık etmemek için.
301 ile 302
Yönlendirme türü seçimi, teknik olduğu kadar bir arama motoru kararıdır.
301, kalıcı taşınmayı bildirir. Arama motorları eski adresi bırakır ve sıralama değerini yenisine taşır. Tarayıcılar bunu önbelleğe alır — ve bu, geri dönüşü zorlaştırır.
302, geçici yönlendirmedir. Eski adres korunur.
En sık yapılan hata, geçici bir bakım yönlendirmesinde 301 kullanmaktır. Bakım bitse de kullanıcıların tarayıcısı eski kararı hatırlamaya devam eder.
Tersi de bir hatadır: kalıcı alan adı değişikliğinde 302 kullanmak, eski adresin sıralamasını yeni adrese taşımaz.
429 ve 499
İkisi de günlüklerde göründüğünde çok şey anlatır.
429, hız sınırının devreye girdiğini söyler. Meşru bir istemci bunu alıyorsa sınır fazla dardır; bir tarayıcı alıyorsa koruma çalışıyordur.
499 standart bir kod değildir; bazı sunucuların, istemcinin yanıtı beklemeden bağlantıyı kapattığı durumlar için ürettiği kayıttır.
Günlükte çok sayıda 499 görülüyorsa anlamı nettir: sayfa o kadar yavaştır ki kullanıcılar beklemeyi bırakıyordur. Bu, hiçbir hata kodu üretmeyen ama en gerçek performans sinyalidir.
Ölçüm olarak kullanmak
Durum kodları, hizmet sağlığının en ucuz göstergesidir. Toplam istek içindeki 5xx oranı, doğrudan bir hizmet düzeyi göstergesi olarak kullanılabilir.
Sunucunun ayakta olmasını ölçmek yerine bunu ölçmek, kullanıcı deneyimine çok daha yakındır; gerekçesi SLA, SLO ve SLI farkı yazısında.
Uyarı kurarken tek tek hatalara değil orana bakmak gerekir; ölçüt alarm neye bakmalı yazısında.
Kısaca
Kodun ilk hanesi sorumluluğun nerede olduğunu söyler; 4xx istekte, 5xx sunucudadır.
En değerli ayrım 502 ile 504 arasındadır: biri arka ucun çalışmadığını, diğeri yavaş olduğunu söyler ve çözümleri zıttır. Günlükte biriken 499’ları da göz ardı etmeyin — hata üretmeyen tek gerçek yavaşlık sinyali odur.