İçindekiler
Tarayıcınız bir sayfa istediğinde sunucu, sayfanın kendisinden önce üç haneli bir sayı gönderir. Bu sayı, isteğin sonucunu özetler. Çoğu zaman görmezsiniz, çünkü cevap 200'dür ve sayfa açılır. Ama bir şeyler ters gittiğinde bu sayı, sorunun nerede olduğuna dair en hızlı ipucudur.
Bir adresin durum kodunu görmek için:
curl -sI https://ornek.com/sayfa | head -1
İlk hane kodun sınıfını belirler:
- 1xx: Bilgi (nadiren görürsünüz)
- 2xx: Başarılı
- 3xx: Yönlendirme
- 4xx: İstemci tarafında hata (istek hatalı ya da izin yok)
- 5xx: Sunucu tarafında hata
2xx: Başarılı
- 200 OK: İstek başarılı, içerik gönderildi.
- 201 Created: Yeni bir kaynak oluşturuldu. API'lerde, örneğin yeni bir sipariş kaydedildiğinde kullanılır.
- 204 No Content: İşlem başarılı ama gönderilecek içerik yok. Silme işlemlerinde sık görülür.
3xx: Yönlendirme
- 301 Moved Permanently: Sayfa kalıcı olarak yeni bir adrese taşındı. Arama motorları eski adresin değerini yenisine aktarır. Alan adı değişikliği, HTTP'den HTTPS'e geçiş ve kalıcı adres değişiklikleri için doğru kod budur.
- 302 Found: Geçici yönlendirme. Arama motorları eski adresi dizinde tutmaya devam eder. Kalıcı bir taşımada yanlışlıkla 302 kullanmak, SEO açısından sık yapılan bir hatadır.
- 304 Not Modified: Tarayıcının önbelleğindeki kopya hâlâ güncel, yeniden indirmeye gerek yok. Normal ve iyi bir durumdur.
- 307 / 308: 302 ve 301'in, istek yöntemini (örneğin POST) koruyan modern karşılıkları.
Yönlendirme zincirlerinden kaçının. http://ornek.com → https://ornek.com → https://www.ornek.com gibi zincirler her adımda gecikme ekler. Mümkünse tek adımda son adrese gidin.
4xx: İstemci hataları
- 400 Bad Request: İstek bozuk ya da anlaşılamıyor. Çok büyük çerezler, hatalı biçimlendirilmiş bir istek ya da API'ye gönderilen geçersiz JSON bu hataya yol açabilir.
- 401 Unauthorized: Kimlik doğrulaması gerekiyor ama yapılmamış ya da başarısız olmuş. Adındaki "unauthorized" kelimesine rağmen aslında "kim olduğunu bilmiyorum" anlamına gelir.
- 403 Forbidden: Kim olduğunuz biliniyor (ya da önemli değil), ama bu kaynağa erişim izniniz yok. Web sitelerinde en sık sebepleri: dosya ve klasör izinleri,
.htaccessiçindeki bir engelleme kuralı, güvenlik duvarı ya da ModSecurity gibi bir web uygulama güvenlik duvarının isteği engellemesi. - 404 Not Found: Bu adreste bir şey yok. Silinmiş sayfalar, yanlış yazılmış adresler ve bozuk kalıcı bağlantılar bu kodu döndürür. Yayından kaldırdığınız önemli sayfaları ilgili yeni sayfalara 301 ile yönlendirin.
- 405 Method Not Allowed: Adres var ama bu yöntemle (örneğin GET yerine POST) kullanılamıyor.
- 410 Gone: Kaynak kalıcı olarak kaldırıldı ve geri gelmeyecek. Arama motorları bu sayfaları 404'e göre daha hızlı dizinden çıkarır.
- 413 Content Too Large: Gönderilen veri çok büyük. Büyük dosya yüklemelerinde sık görülür. Web sunucusunun (
client_max_body_size,LimitRequestBody) ya da PHP'nin (upload_max_filesize,post_max_size) sınırına takılmışsınızdır. - 429 Too Many Requests: Çok fazla istek gönderdiniz ve istek sınırına takıldınız. Biraz bekleyip tekrar deneyin.
5xx: Sunucu hataları
Bu kodlarda sorun sizin tarafınızda değil, sunucu tarafındadır. Ama hangi 5xx kodunun döndüğü, sorunun hangi katmanda olduğunu söyler.
- 500 Internal Server Error: Uygulama beklenmeyen bir hatayla karşılaştı. PHP'de ölümcül bir hata, bozuk bir
.htaccessdosyası ya da yanlış dosya izinleri en yaygın sebeplerdir. Bakılacak yer: web sunucusunun ve PHP'nin hata günlükleri. - 502 Bad Gateway: Önde duran sunucu (Nginx, bir CDN ya da yük dengeleyici), arkadaki sunucudan (PHP-FPM, Node.js uygulaması, Apache) geçersiz bir cevap aldı ya da hiç bağlanamadı. Çoğu zaman arkadaki servis durmuş ya da çökmüştür. Bakılacak yer: arkadaki servisin durumu (
systemctl status php-fpm) ve günlükleri. - 503 Service Unavailable: Sunucu şu anda isteği karşılayamıyor. Bakım modu, aşırı yük ya da kaynak sınırına takılmış bir hosting hesabı bu kodu döndürür. Geçici bir durum olması beklenir.
- 504 Gateway Timeout: Önde duran sunucu, arkadaki sunucudan zamanında cevap alamadı. Arkadaki servis çalışıyor ama çok yavaş. Uzun süren bir veritabanı sorgusu, dış bir API'nin cevap vermemesi ya da tükenmiş bir PHP-FPM havuzu tipik sebeplerdir.
502 ile 504 arasındaki fark teşhis için çok değerlidir: 502 "arkadaki servise ulaşamıyorum ya da bozuk cevap veriyor", 504 ise "arkadaki servis çalışıyor ama çok geç cevap veriyor" demektir.
CDN'e özgü kodlar
Cloudflare gibi CDN'ler kendi kodlarını da kullanır. Örneğin 521 "sunucunuz bağlantıyı reddetti", 522 "sunucunuza bağlantı zaman aşımına uğradı", 525 ise "SSL el sıkışması başarısız oldu" anlamına gelir. Bu kodları gördüğünüzde sorun CDN'de değil, CDN ile sizin sunucunuz arasındadır.
Toplu kontrol
Bir sitedeki bütün iç bağlantıların durum kodlarını görmek için bir tarama aracı (Screaming Frog gibi) ya da basit bir komut kullanılabilir:
while read u; do printf "%s %s\n" "$(curl -s -o /dev/null -w '%{http_code}' "$u")" "$u"; done < adresler.txt
Durum kodlarını okumayı öğrendiğinizde "site çalışmıyor" cümlesi, "PHP-FPM durmuş, 502 veriyor" gibi net bir teşhise dönüşür.
Yorumlar
Henüz yorum yok. İlk yorumu siz yazın.