← Tüm yazılar

Olmayan bir sayfa neden gerçekten 404 dönmeli?

Bir hata ekranı göstermek ile HTTP 404 dönmek aynı şey değil. Bu sitenin rota, dosya ve statik hata sayfası yaklaşımı.

Tarayıcıda “sayfa bulunamadı” yazan güzel bir ekran görmek, sunucunun da doğru yanıt verdiği anlamına gelmez. Sunucu aynı anda 200 OK döndürüyorsa, görünüş ile HTTP davranışı birbirinden ayrılmış olur.

Bu sitenin geliştirilmesinde dikkat edilen konulardan biri de buydu: var olan bir makaleye doğrudan ulaşabilmek ve olmayan bir adres için gerçekten 404 Not Found döndürmek.

Bir ekran, iki farklı anlam

200, isteğin başarıyla karşılandığını belirtir. 404 ise istenen kaynağın bulunamadığını anlatır. Bu bilgi yalnız tarayıcı için değil; arama motorları, bağlantı denetleyicileri ve izleme araçları için de önemlidir.

Her bilinmeyen adresi ana sayfanın HTML dosyasına yönlendiren bir SPA fallback, bu farkı kolayca gizleyebilir. Bu sitede bütün adresleri aynı belgeye 200 ile döndürmek yerine, üretilmiş sayfaların listesi esas alınıyor.

Bilinen rota, bilinen dosya

Bir makale yayımlandığında onun HTML ve rota veri dosyaları birlikte hazırlanıyor. ASP.NET Core bu yayın listesindeki yolları sunuyor. Aynı makaleye menüden tıklamak da adresi doğrudan açmak da çalışmalı.

Olmayan bir JavaScript dosyası ise farklı bir durum: ona hata ekranının HTML'sini göndermek, tarayıcının beklediği dosya türünü de bozar. Bu nedenle eksik dosya isteği, bir sayfa belgesi gibi ele alınmıyor.

İstek Beklenen davranış
Var olan sayfa HTML ile 200
Olmayan sayfa Hata belgesi ile 404
Olmayan JavaScript dosyası HTML fallback olmadan 404
Bilinen sayfanın alternatif adresi Kanonik adrese kalıcı yönlendirme

Hata sayfası da bir belge

Önceden /404 adresi için üretilmiş bir React sayfasının başlatma verisini başka bir URL'de kullanmak, tarayıcıdaki ilk HTML ile React'in beklediği görünümü uyuşturmayabilir.

Doğrudan açılan bilinmeyen adresler için bu sitede bağımsız, scriptsiz bir 404 belgesi sunuluyor. Aynı tasarımı kullanıyor; ana sayfa ve gezinme bağlantıları normal belge geçişleriyle çalışıyor. Böylece bir hata sayfasının kendisi yeni bir JavaScript başlangıç hatasına dönüşmüyor.

Ne kontrol ediliyor?

Host testleri HTTP durumunu, eksik dosyaların HTML almamasını, yönlendirmeleri ve önbellek başlıklarını denetliyor. Tarayıcı kontrolü de belgenin gerçekten okunabildiğini ve başlangıç hatası üretmediğini tamamlıyor.

Hata yanıtları no-store ile sunuluyor. Sonradan geçerli hâle gelen bir adres için eski bir 404'ün önbellekte kalmasını istemiyoruz.

Küçük bir site için bile doğru durum kodları, gösterişli bir hata ekranı kadar önemli. Okuyucunun gördüğü şey ile sunucunun söylediği şey aynı olmalı.

Okuduğun için teşekkürler.Üzerine konuşalım