Loading...

Temeller · 7 dk okuma

HTTP durum kodları: "kim reddetti, nerede" diye okuyun

Her kaynak kodların ne anlama geldiğini sıralar. Neredeyse hiçbiri onları hangi makinenin ürettiğini söylemez — oysa CDN arkasındaki bir sitede hata ayıklamayı yarım günden bir dakikaya indiren soru budur. Bu liste, proxy'nin gözünden yazıldı.

Güncellendi

HTTP durum kodları: "kim reddetti, nerede" diye okuyun

Sınıflar, kısaca

2xx — oldu. 200 OK normal cevaptır. 204 No Content başarılı ama döndürecek bir şeyi olmayan istektir; API'lerde sık görülür. 206 Partial Content bir aralık isteğidir; videoda ileri sarma ve kaldığı yerden devam eden indirmeler böyle çalışır.

3xx — başka yere bak. 301 kalıcıdır ve sıralama sinyallerini aktarır; 302 geçicidir ve aktarmaz. 304 Not Modified sessiz olanıdır: istemcide zaten geçerli bir kopya vardır, gövde hiç gönderilmez. Sağlıklı bir site bol bol 304 üretir.

4xx — istek reddedildi. 400 bozuk biçimli, 401 kimlik bilgisi istiyor, 403 bilinçli bir ret, 404 bulunamadı, 410 kasten kaldırıldı, 429 çok fazla istek.

5xx — sunucu tarafı başarısız oldu. 500 yakalanmamış bir hata, 502 arkadaki makineyle bozulmuş bir konuşma, 503 geçici bir ret, 504 arkadaki makineyi beklerken zaman aşımı.

Kodu hangi durak üretti

CDN arkasındaki bir istek, kendisine cevap verebilecek en az üç yerden geçer: edge, origin web sunucunuz ve uygulamanız. Her biri, diğerlerinin üretemeyeceği kodlar üretir.

Yalnızca edge üretebilir: origin kapalıyken sunulan bir önbellek isabeti, origin'inize dair bir 502 ya da 504, bir WAF kuralından veya coğrafi engelden gelen 403, ve o alan adı için tanımlı bir servis olmadığını söyleyen 503.

Yalnızca origin web sunucunuz üretir: dosya izinlerinden ya da bir deny kuralından gelen 403, diskte olmayan bir yol için 404, kabul ettiğinden büyük bir gövde için 413.

Yalnızca uygulamanız üretir: kimin giriş yaptığına bağlı 401 ve 403, doğrulama için 422, yakalanmamış bir istisnadan 500.

Yani ilk teşhis sorusu "502 ne demek" değil, "bu istek origin'ime hiç ulaştı mı" olmalı. Origin erişim logunda görünmüyorsa, origin'de değiştireceğiniz hiçbir şey onu etkilemez.

Durağı başlıklardan bulmak

Sayfaya değil başlıklara bakarsanız, yanıt size kimin işlediğini söyler.

curl -sI https://example.com/

Bir önbellek durumu başlığı — cdn.com.tr'de HIT ya da MISS değerli X-Proxy-Cache-MT — isteği edge'in işlediği anlamına gelir. HIT ise origin'e hiç danışılmamıştır; bir değişikliği test ederken hâlâ eski davranışı görüyorsanız bunu bilmek işinizi görür.

Burada iki tuzak var. Birincisi: curl -I bir HEAD isteği gönderir ve bazı sunucular ile ara katmanlar HEAD'e GET'ten farklı davranır; yani -I ile görünen bir başlık gerçek bir GET'te olmayabilir, tersi de doğrudur. Önemli olduğunda normal bir GET ile curl -sD - -o /dev/null kullanın. İkincisi: önbelleğe alınmış bir hata yanıtı, sebebini düzelttikten sonra da sunulmaya devam eder. Düzeltmeden sonra kod değişmiyorsa, hata ayıklamayı sürdürmeden önce o yolu purge'leyin.

Bilerek ayarlamaya değer kodlar

301 mi, 302 mi. Taşıma kalıcıysa 301 kullanın — eski URL'nin sıralama değerini yenisinde toplar. 302 ise eski URL'yi canonical olarak bırakır; geçici bir kampanya yönlendirmesinde istediğiniz budur, site yeniden yapılandırmasından sonra istediğiniz bu değildir. Yönlendirmeler edge'de önbelleğe alınır, yani yanlış olanı kendisini getiren deploy'dan uzun yaşar.

404 mü, 410 mu. İkisi de "burada yok" der. 410 ayrıca "ve geri de gelmeyecek" der; bu da URL'nin dizinden daha hızlı düşmesini sağlar. Kaldırılmış ürün sayfaları için dürüst kod 410'dur.

Retry-After ile 503. Bakım sırasında arama motoru botlarını sabırlı tutan ikili budur. 200 ile sunulan bir bakım sayfası ise onlara bakım duyurunuzun içeriğiniz olduğunu söyler.

Rate limit için 429. Ret, bu istemcinin ne kadar hızlı sorduğuyla ilgiliyse 429, 503'ten daha dürüsttür. Her yığın bunu varsayılan olarak göndermez — nginx'te rate limiting, aksi söylenmedikçe 503 döner.

Gerçekte vaktinizi alacak durum kodları

Pratikte, proxy arkasındaki bir sitede hata ayıklamaya harcanan zamanın çoğunu üç kod alır ve her birinin kendi rehberi var:

**502 Bad Gateway** — edge, origin'inizden kullanılabilir bir cevap alamadı. Dört sebep: reddedilen bağlantı, erken kapanma, TLS el sıkışma hatası, bozuk biçimli yanıt.

**403 Forbidden** — bir şey bilerek reddetti. Beş olası karar verici: origin'iniz, bir WAF kuralı, bir ülke veya ağ engeli, hotlink koruması, bir IP listesi. Tahmin etmeyi bakıp bulmaya çeviren şey, hata sayfasındaki referans numarasıdır.

**503 Service Unavailable** — geçici bir ret: aşırı yük, bakım, bir rate limit ya da o alan adı için origin tanımlanmamış bir edge.

Dördüncüsü, 504, 502'nin zaman aşımı ikizidir ve 502 rehberinde ele alınır; çünkü ikisini ayırt etmek işin zaten çoğudur.

HTTP durum kodları SSS

Hangi durum kodları gerçekten SEO'yu etkiler?

Neyin dizine gireceğini değiştirenler: 301 bir URL'yi hedefinde toplar, 302 toplamaz, 404 ve 410 URL'yi kaldırır (410 daha hızlı), uzun süren bir 5xx ise sayfayı eninde sonunda düşürür. Sessizce zarar vereni, hata sayfasında sunulan 200'dür: hata metni içerik diye dizine girer.

Neden curl ile tarayıcımdan farklı bir kod alıyorum?

İstekler aynı değil. Tarayıcınız çerez, farklı bir user agent ve bir Accept başlığı gönderir; curl genelde hiçbirini göndermez. WAF'ı olan ya da giriş çerezine göre önbelleği atlayan bir sitede bu farklar kararı değiştirir. Bir sonuca varmadan önce benzerini benzeriyle karşılaştırın.

304 bir hata mı?

Hayır; önbellek isabetinden sonraki en iyi sonuçtur: istemcide zaten geçerli bir kopya vardır ve sunucu hiç gövde göndermez. Loglarınızda bol 304 olması, koşullu isteklerin çalıştığı anlamına gelir.

İzleme sistemimdeki 000 ya da boş durum ne demek?

Okunacak bir HTTP yanıtı olmadığı: DNS çözülmedi, TCP bağlantısı kurulamadı ya da TLS anlaşamadı. Bu bir uygulama sorunu değil bağlantı sorunudur ve elinizdeki alarm sisteminde 5xx'ten ayırmaya değer.