HTTP Durum Kodları(Status Codes) Nedir?
HTTP Nedir? HTTP Durum Kodları(Status Codes) Nedir? Durum Kodları Ne İşe Yarar? Bunların hepsini ve daha fazlasını yazımızda bulabilirsiniz.
HTTP Nedir?
HTTP Durum Kodları(Status Codes) Nedir? Bunu öğrenmeden önce HTTP nedir bunu öğrenelim. Hyper Text Transfer Protocol” türkçesi “Hiper Metin Transfer Protokolü“ sunucu(Web Sitelerin Saklandığı Server) ile istemci(Kullanıcı) arasında ki bilgi aktarımının protokolünü belirler. Bu protokol sayesinde rahatlıkla internete erişim sağlayıp, istediğimiz bilgileri elde edebiliriz.
Ekibimizin teknik denetimlerinde en sık karşılaştığımız durum kodu sorunu 404 değil, iki adımlı 301 zinciri ve 200 dönen ama canonical'i başka sayfayı gösteren adresler. Kendi sitemizde de aynı sorunu bulduk ve tek adıma indirdik; bu yazıdaki kod açıklamaları o denetimlerde tuttuğumuz notlardan geliyor.
İstemci(Kullanıcı) tarafı web sitesine girmek için bir istekte bulunur. Bunun karşılığı olarak sunucu(Server) tarafından bu isteğe karşılık bir veri gönderilir. Temelde çalışma mantığı bu şekildedir.
HTTP Durum Kodu Nedir?
İstemcinin(Kullanıcı) tarafının talebi üzerine sunucu(Server) tarafından gönderilen verilerin durumunu belirten belirli başlı kodlar bulunmaktadır. Bu kodlara da HTTP durum kodları denir.Durum kodlarının çalışma mantığını etki-tepki ilişkisi ile bağdaştırabilirisiniz. İstemci(Kullanıcı) tarafı olarak bir istekte bulunduk ve bunun karşılığı olarak karşımıza HTTP Durum Kodu geldi.
HTTP Durum Kodları Ne İşe Yarar?
Sunucu ile istemci arasında geçen veri trafiğini yönetmek, yönlendirmek ve durumunu kontrol etmek için kullanılır.
Durum kodları istemci (kullanıcı) tarafını bilgilendirirler.
Sunucu tarafından gönderilen verilerin kullanıcı tarafına aktarımı sürecinde hata mı alındı, alındıysa bu hatanın nereden kaynaklı olduğunu,(Sunucu taraflı bir 5XX hatası mı yoksa web sitesinde aslında bulunmayan ve fazla karakter girişi sonucu oluşan kullanıcı taraflı bir 4XX hatası mı), web sayfası yönlendirmelere uğramış mı ya da her şey istenilen şekilde geçti ve istemci tarafı sunucudan gelen verileri sağlıklı bir şekilde görmeye başladı. Başarılı veri aktarımında kullanılan 200 durum kodu mu gösterildi, bunları HTTP Durum Kodlarına bakarak öğrenebiliriz.
HTTP Durum Kodları Ne Zaman Görülür?
İstemci tarafı çoğu zaman durum kodlarını görmez. Sebebi ise istekte bulunduğu veri sağlıklı şekilde karşısına geldiyse 200(İşlem Başarılı Tamamlandı) durum kodu arka planda işlenir fakat bunu kullanıcıya göstermez.
Durum kodlarından sadece 4XX ve 5XX kodları istemci(Kullanıcı) tarafına gösterilir. Sebebi ise bu kodların hata kodları anlamına gelmesidir. Bir çok kez karşınıza “Web sitesine şu anda ulaşılamıyor”, “Sunucunun yanıt vermesi çok uzun sürdü” gibi hata mesajları çıkmıştır. Özellikle kar tatili dönemlerinde çocukların valilik duyurusunu okumak için aynı anda siteye girmesi gibi normal zamanda trafiğin hiç bu kadar yoğun olmadığı dönemlerde 5XX yani “Sunucu yanıt vermeyi durdurdu” gibi bir hata karşımıza çıkar. Bunun sebebi çok fazla istemcinin(Kullanıcının) sunucudan veri talebinde bulunması ve sunucunun taleplere cevap vermekte zorlanması olarak karşımıza çıkmaktadır.
HTTP Durum Kodları Nasıl Sınıflandırılır?
- 1xx: İstemci (Kullanıcı) tarafından sunucu tarafına isteğin ulaştığını gösteren bilgilendirme amaçlı bir koddur.
- 2xx: İstemci(Kullanıcı) tarafından sunucuya gönderilen isteğin, sunucu tarafından onaylanıp istemci(Kullanıcı) tarafına başarılı şekilde gönderildiğini ifade eden durum kodlarıdır.
- 3xx: Ulaşılması için istemci(kullanıcı) tarafından talepte bulunulan sayfanın başka bir sayfaya taşındığını ve ulaşmak için sayfa yönlendirme işlemi yapıldığını belirten durum kodlarıdır.
- 4xx: İstemci tarafından bulunulan isteğin, sunucu tarafında bir karşılığı olmadığını bu nedenle hata alındığını ifade eden Hata Durum Kodudur.
- 5xx: İstemci tarafından bulunulan isteğin sunucuya ulaştığını fakat sunucu kaynaklı sorunlardan ötürü isteğin gerçekleştirilemediğini belirten hata durum kodudur.
HTTP Durum Kodları ve Anlamları Nelerdir?
- 100: İstemci tarafından gönderilen talebin sunucu tarafından onaylandığını ve talebin işlenmesinin hazır olduğu anlamına gelmektedir.
- 101:İstemcinin sunucudan gönderim protokolünü değiştirmesini istediğini ve sunucu tarafından da onaylandığını gösterir.
- 103: Son istemci talebi sonrasında verilerin döngüye sokulduğunu gösterir.
- 200: İstemci tarafından gönderilen isteğin, sunucu tarafından başarılı şekilde gönderilip, istemci tarafına ulaştığını gösteren Başarılı İşlem Durum Kodudur.
- 201: Sunucu tarafından talep edilen isteğin yerine getirildiği anlamına gelir.
- 202: Sunucunun isteği sıraya aldığı anlamına gelmektedir.
- 203: Başarılı şekilde sunucudan çıkarken, sunucu taraflı kaynak değiştirilmiş.
- 204: Sunucu işlemi onaylandı fakat bir içerik döndürülmeyecektir.
- 205: Sunucu işlemi onayladı fakat bir içerik döndürülmeyecektir. Belge görünümü sıfırlanmalıdır.
- Durdurulmuş indirme işlemlerin devam ettirilmesini ve indirmeleri parçalara ayırması anlamına gelir.
- 300: Sunucunun istemci taraflı işlemi gerçekleştirmesi için birden fazla kaynağa sahip olduğu ve aralarında seçim yapılması gerektiğini belirtir.
- 301 Yönlendirmesi: Sunucu tarafında bir verinin bulunduğu yerin kalıcı olarak değiştirildiği anlamına gelmektedir.
- 302 Yönlendirmesi: Sunucu tarafında bir verinin bulunduğu yerin geçici olarak değiştirildiği anlamına gelir.
- 303:POST metodu kullanılarak istenilen veri kaynağına ulaşıldığını get metodu ile veriyi sunucudan almak için url değiştirilmelidir.
- 304:Tarayıcı önbelleğindeki verilerin değiştirilmediği anlamına gelmektedir.
- 307:Sunucu tarafında ki verinin geçici olarak yer değiştirdiği anlamına gelir. HTTP protokollerinin değişmesini engeller.
- 308:Sunucu tarafında ki verinin kalıcı olarak yer değiştirdiği anlamına gelir. HTTP protokollerinin değişmesini engeller.
- 400: Sunucunun istemci taraflı hatalardan dolayı veriyi kullanamadığı anlamına gelir.
- 401 Hatası: İstemci tarafının görmek istediği veriye ulaşmak için giriş bilgilerinizin doğrulanmadığı anlamına gelmektedir.
- 402: Rezerve edilmiş ve ödeme gerekmektedir.
- 403: Sunucu tarafından talep edilen veri yasaklı olduğunda gösterilmektedir.
- 404 Hatası: Ulaşılmak istenen verinin sunucu tarafından bulunamadığı anlamına gelmektedir.
- 405: Talep edilen veri için talep etme yolu desteklenmediğinde alınan hatadır.
- 406: Sunucu tarafı tarayıcıya veri başlığında talep edilen şekilde veriyi gönderemiyorsa bu hatayı verir.
- 407:Proxy kullanımlarında kimlik doğrulaması veya yetkilendirme gerektiren durumlarda kullanılır.
- 408:Sunucu tarafının isteği beklerken fazla zaman geçmesi durumunda zaman aşımı hatası olarak kullanılır.
- 409: Verilerin uyuşmadığı durumlarda karşılaşılan bir hatadır.
- 410: İstenen verinin sunucusunun kalıcı olarak değiştirildiği anlamına gelmektedir.
- 411:Çağrılan veri için belirli bir uzunluk belirtilmediği durumlarda karşılaşılan hatadır.
- 412: İstemci tarafından talep edilen ön koşulların sunucu tarafından karşılanamadığı anlamına gelmektedir.
- 413: Talep edilen işlemin sunucu tarafından işlenemeyecek kadar büyük olduğu durumlarda karşılaşılan hatadır.
- 414: Sunucunun işlemesini çok zorlaştıracak kadar büyük düzeyde yazılmış sorguların GET metodu kullanılarak istenmesi ile karşılaşılan hata kodudur.
- 415: Gelen talebin sunucu tarafından desteklenmeyen bir dosya biçiminde olması durumunda karşılaşılan hatadır.
- 416:Talep edilen verinin bir kısmının sunucu tarafından karşılanamadığı durumlarda ortaya çıkan bir hatadır.
- 417: Sunucunun istemci taraflı talebin karşılanamadığı durumlarda ortaya çıkan hatadır.
- 422: Mantıksal hata içeren istemci taraflı isteklerde sunucunun cevap veremediği durumlarda ortaya çıkan hatadır.
- 425:Sunucunun döngüye girecek verileri gerçekleştirmemesi durumlarında karşılaşılan hatadır.
- 426: İstemci tarafından gelen talebin istek başlığında ki içeriğin farklı bir protokole geçmesi durumunda ortaya çıkarılan hatadır.
- 428: Sunucunun verileri işlemeden önce koşulların girilmesi gerektiğini belirten hata kodudur.
- 429: İstemci tarafının kısa süre içerisinde çok fazla istek de bulunması durumunda sunucunun kendini güvene almak için kısıtlama uyguladığını anlatan durum kodudur.
- 431: İstemci tarafından gönderilen talebin, Header kısımlarının büyük olması sebebiyle gösterilen hatadır.
- 500: Sunucu kaynaklı sorunlarda gösterilen durum kodudur.
- 501: Sunucunun istenilen veriyi işleyemediği durumlarda gösterilen durum kodudur.
- 502: Sunucular arası bağlantı isteklerinin olumsuz sonuçlanması durumunda gösterilen durum kodudur.
- 503: Sunucunun geçici olarak hizmet vermediği durumlarda gösterilen durum kodudur.
- Sunucular arası işlemlerin uzun sürmesi sonucu zaman aşımına uğraması durumunda ki durum kodudur.
- Kullanılan ağın sunucu ile bağlanması öncesinde kimlik doğrulamasının yapılması gerektiği durumlarda gösterilir.
HTTP Durum Kodları Nasıl Tespit Edilir?
Belirli durum kodları dışında (404, 403,501 vb) durum kodlarının kullanıcılar tarafından ön planda görünmediğini söylemiştik. Çeşitli araçlar kullanarak web siteleri üzerinde uygulanan durum kodlarını görebiliriz. Bu araçlardan bir tanesi httpstatus. Bu aracımız web sayfaları ya da web siteleri üzerinde yapılan yönlendirmeleri görmemizi sağlıyor.
İlk olarak kontrol etmek istediğimiz url adresini kopyalıyoruz sonrasında ise “Check Status” butonuna tıklayarak kontrol işlemini başlatıyoruz. Araç bize url adresinde yönlendirme(3XX), hatalı sayfa(4XX) ya da başarılı(2XX) kodlarından url yapımıza uygun olanı gösteriyor.
301 yönlendirmesi nedir, nasıl yapılır?
301, bir sayfanın kalıcı olarak başka bir adrese taşındığını bildiren durum kodudur. Arama motoru eski URL'nin sinyallerini yeni adrese aktarır, dizinde yeni URL'yi tutar ve zamanla eski adresi düşürür.
301 şu durumlarda kullanılır: alan adı değişikliği, HTTP sürümünden HTTPS sürümüne geçiş, www ile www'suz sürümün tek adreste birleştirilmesi, URL yapısının güncellenmesi, kaldırılan bir sayfanın en yakın güncel karşılığına bağlanması.
Apache sunucularda .htaccess dosyasına Redirect 301 /eski-sayfa https://example.com/yeni-sayfa satırı eklenir. PHP tarafında header("HTTP/1.1 301 Moved Permanently"); ve ardından header("Location: https://example.com/yeni-sayfa"); exit; yazılır. HTML meta refresh bir yönlendirme değildir: tarayıcıyı taşır ama arama motoruna kalıcılık sinyali vermez, dolayısıyla 301 yerine geçmez.
Yönlendirme kurulduktan sonra kontrol edilmesi gerekenler:
- Eski URL gerçekten 301 dönüyor mu, 302 ya da 200 değil.
- Hedef 200 dönüyor mu; bir başka yönlendirmeye bakmıyor mu. Zincir bırakmayın.
- Site içindeki bağlantılar eski URL'yi değil doğrudan yeni URL'yi gösteriyor mu.
- Site haritasından eski URL çıkarıldı mı.
301 kurulmazsa eski adrese verilen dış bağlantıların değeri hiçbir sayfaya ulaşmaz, kullanıcı hata sayfasıyla karşılaşır ve arama motoru eski URL'yi bir süre daha dizinde tutarak gereksiz tarama harcar.
Hedefi alakasız bir sayfa olan 301, arama motoru tarafından yumuşak 404 sayılabilir ve beklenen değeri aktarmaz. Karşılığı gerçekten yoksa 410 daha dürüst bir sinyaldir.
302 yönlendirmesi nedir, 301'den farkı nedir?
302, kaynağın geçici olarak başka bir adreste bulunduğunu bildirir. Arama motoru bu durumda orijinal URL'yi dizinde tutmayı tercih eder ve sinyalleri hedefe kalıcı biçimde aktarmaz.
302 şu durumlarda doğru seçimdir: kısa süreli kampanya sayfaları, bakım ya da stok yenileme sırasında geçici yönlendirme, A/B testi sırasında trafiğin bir varyanta yönlendirilmesi, bölge veya dil tespitine göre geçici yönlendirme.
En sık yapılan hata, kalıcı bir taşımayı 302 ile yapmaktır. Bu durumda eski URL dizinde kalmaya devam eder, yeni URL beklenen sinyalleri almaz ve iki adres uzun süre birlikte yaşar.
| Kod | Anlamı | Sinyal aktarımı | Ne zaman |
|---|---|---|---|
| 301 | Kalıcı taşıma | Hedefe aktarılır | Adres kalıcı olarak değişti |
| 302 | Geçici taşıma | Kaynakta kalır | Geçici kampanya, bakım, test |
| 307 | Geçici taşıma, yöntem korunur | Kaynakta kalır | POST isteğinin yöntemi korunmalı |
| 410 | Kalıcı olarak kaldırıldı | Aktarım yok | İçerik kaldırıldı, karşılığı yok |
| 503 | Hizmet geçici olarak kullanılamıyor | Aktarım yok | Planlı bakım |
Apache tarafında Redirect 302 /kampanya https://example.com/yeni-kampanya, NGINX tarafında return 302 https://example.com/yeni-kampanya; kullanılır. PHP'de header("Location: ...", true, 302); yazmak yeterlidir. JavaScript ile yapılan yönlendirme sunucu düzeyinde bir durum kodu üretmez; arama motoru bunu bir yönlendirme olarak güvenilir biçimde okuyamaz.
Geçici yönlendirmenin süresini takip edin. Kampanya bittiğinde kaldırılmayan 302, zamanla kalıcı bir yanlış yapılandırmaya dönüşür.
404 hatası nedir, nasıl düzeltilir?
404, istenen adreste bir kaynak bulunmadığını bildirir. Sunucu çalışmaktadır; sorun yalnızca o URL'dedir.
En sık nedenler: silinen ya da taşınan sayfaya yönlendirme kurulmaması, yanlış yazılmış iç bağlantı, eski bir sayfaya verilmiş dış bağlantı, site yapısı değişirken güncellenmeyen menü bağlantıları, büyük harf ya da eğik çizgi farkından kaynaklanan URL tutarsızlıkları.
Tespit için üç kaynağa birlikte bakın: arama konsolunun kapsam raporu, site genelinde bir tarama çıktısı ve sunucu günlüklerindeki 404 kayıtları. İlk ikisi arama motorunun gördüğünü, üçüncüsü gerçek kullanıcı ve bot trafiğini gösterir.
Düzeltme sırası:
- Sayfanın güncel bir karşılığı varsa 301 ile o adrese yönlendirin.
- Karşılığı yoksa ve içerik kalıcı olarak kaldırıldıysa 410 döndürün.
- URL yanlış yazıldıysa kaynaktaki bağlantıyı düzeltin; yönlendirme kurmayın.
- Dış bağlantıdan gelen 404'leri öncelikli ele alın; oradaki değer yalnızca yönlendirmeyle korunur.
Dikkat edilmesi gerekenler: bütün 404'leri ana sayfaya yönlendirmeyin, bu yumuşak 404 üretir. Hata sayfasının kendisi 200 değil 404 durum kodu döndürmelidir. Özel hata sayfanız arama kutusu, ana kategorilere bağlantı ve kısa bir açıklama içersin.
Önleme tarafında en etkili üç uygulama: URL yapısını değiştirirken yönlendirme haritasını aynı anda hazırlamak, site içi bağlantıları düzenli taramak ve kaldırılan içerik için karar kuralını önceden yazmak.