Teknoloji, Bilim ve Akıl
HTTP Hata Kodları Nedir? 404, 403, 500 ve Tüm Durum Kodları Rehberi
Web Programlama

HTTP Hata Kodları Nedir? 404, 403, 500 ve Tüm Durum Kodları Rehberi

8 dk okuma 3 okunma 0 yorum
Kısaca: HTTP hata kodları, sunucunun bir isteğe verdiği üç haneli durum cevabıdır. İlk rakam sınıfı belirler: 1xx bilgi, 2xx başarı, 3xx yönlendirme, 4xx istemci hatası, 5xx sunucu hatası anlamına gelir.
İçindekiler
  1. Kısaca HTTP durum kodları ne anlatır?
  2. HTTP durum kodu nedir ve nasıl çalışır?
  3. Standartta son dönemde ne değişti?
  4. 1xx bilgilendirme kodları nelerdir?
  5. 2xx başarı kodları nelerdir?
  6. 3xx yönlendirme kodları nelerdir?
  7. 4xx istemci hata kodları nelerdir?
  8. 401 ile 403 arasındaki fark nedir?
  9. 400 ile 422 ne zaman kullanılır?
  10. 5xx sunucu hata kodları nelerdir?
  11. Resmi olmayan ama sık görülen kodlar hangileridir?
  12. En sık karşılaşılan hatalar nasıl çözülür?
  13. 404 Not Found neden çıkar?
  14. 403 Forbidden neden çıkar?
  15. 500 Internal Server Error nasıl giderilir?
  16. 502, 503 ve 504 arasındaki fark nedir?
  17. 429 Too Many Requests alınca ne yapılır?
  18. PHP ile doğru durum kodu nasıl döndürülür?
  19. Durum kodları arama motorlarını ve yapay zeka botlarını nasıl etkiler?

HTTP hata kodları, bir web sunucusunun tarayıcıdan veya uygulamadan gelen isteğe verdiği üç haneli durum cevabıdır. İlk rakam kodun sınıfını gösterir: 1xx bilgilendirme, 2xx başarı, 3xx yönlendirme, 4xx istemci kaynaklı hata, 5xx sunucu kaynaklı hata demektir. Yani 404 gördüğünüzde sorun istenen adrestedir, 500 gördüğünüzde ise sunucudaki kodda veya yapılandırmadadır.

Bu rehberde resmi kayıtlı durum kodlarının tamamını sınıf sınıf ele alıyoruz. Ayrıca Nginx ve Cloudflare gibi yaygın altyapıların kullandığı resmi olmayan kodlara, son standart güncellemesinde değişen isimlere ve sahada en sık karşılaşılan hataların çözümüne de değiniyoruz.

Kısaca HTTP durum kodları ne anlatır?

  • 1xx: İstek alındı, işlem sürüyor.
  • 2xx: İstek başarıyla işlendi.
  • 3xx: İstenen kaynak başka bir adreste, istemci yönlendiriliyor.
  • 4xx: Hata istek tarafında; adres, yetki veya gönderilen veri sorunlu.
  • 5xx: Hata sunucu tarafında; istek geçerli ama sunucu cevap üretemedi.

HTTP durum kodu nedir ve nasıl çalışır?

Tarayıcı bir adrese gittiğinde sunucuya bir HTTP isteği gönderir. Sunucu cevabın ilk satırında protokol sürümünü ve durum kodunu bildirir. Sayfa içeriği bu satırdan sonra gelir. Kullanıcı çoğu zaman bu kodu görmez; yalnızca bir şeyler ters gittiğinde ekrana yansır.

Durum kodu yalnızca insanlar için değildir. Arama motoru botları, yapay zeka tarayıcıları, API istemcileri ve izleme araçları kararlarını bu koda göre verir. Bu yüzden yanlış kod döndürmek, hata sayfası göstermekten daha büyük bir sorundur.

Bir adresin hangi kodu döndürdüğünü komut satırından saniyeler içinde görebilirsiniz:

curl -I https://teknikzeka.net/

HTTP/2 200
content-type: text/html; charset=UTF-8

Standartta son dönemde ne değişti?

HTTP anlamlarını tanımlayan güncel belge RFC 9110 oldu ve eski RFC 7231 ailesinin yerini aldı. Bu güncellemeyle bazı kodların resmi adı değişti. Kod numaraları aynı kaldı, yalnızca açıklama metinleri sadeleşti.

  • 413: Payload Too Large yerine Content Too Large.
  • 422: Unprocessable Entity yerine Unprocessable Content. Bu kod artık yalnızca WebDAV kapsamında değil, genel HTTP standardının parçası.
  • 418: Şaka amaçlı çaydanlık kodu resmi olarak kullanılmayan, ayrılmış bir numara olarak işaretlendi.

Eski kütüphaneler ve sunucu logları hâlâ eski isimleri gösterebilir. İkisi de aynı kodu ifade eder, endişe etmeye gerek yoktur. Kayıtlı kodların güncel listesi IANA durum kodu kayıt defterinde tutulur.

1xx bilgilendirme kodları nelerdir?

1xx kodları geçici cevaplardır. Sunucu isteği aldığını ve asıl cevabın yolda olduğunu bildirir. Günlük geliştirmede nadiren elle üretilir.

KodAdAnlamı
100Continueİstek başlıkları kabul edildi, istemci gövdeyi gönderebilir.
101Switching ProtocolsProtokol değiştiriliyor. WebSocket bağlantısı bu kodla başlar.
102ProcessingWebDAV işlemi sürüyor, henüz cevap hazır değil.
103Early HintsAsıl cevap gelmeden önce ön yükleme ipuçları gönderilir.

2xx başarı kodları nelerdir?

2xx kodları isteğin anlaşıldığını ve kabul edildiğini gösterir. API tasarlarken hepsine 200 döndürmek yerine doğru kodu seçmek istemci tarafındaki işi ciddi biçimde kolaylaştırır.

KodAdAnlamı
200OKİstek başarılı, cevap gövdesinde sonuç var.
201CreatedYeni bir kaynak oluşturuldu. Kayıt ekleyen POST istekleri için uygundur.
202Acceptedİstek kabul edildi ama işlem henüz bitmedi. Kuyruğa alınan işler için kullanılır.
203Non-Authoritative InformationCevap bir ara sunucu tarafından değiştirilmiş olabilir.
204No Contentİşlem başarılı, döndürülecek içerik yok. Silme işlemlerinde yaygındır.
205Reset Contentİşlem başarılı, istemci formu sıfırlamalı.
206Partial ContentDosyanın yalnızca istenen bölümü gönderildi. Video oynatma ve kaldığı yerden indirme bununla çalışır.
207Multi-StatusWebDAV; birden fazla işlem için ayrı ayrı durum bilgisi döner.
208Already ReportedWebDAV; öğe aynı cevapta daha önce bildirildi.
226IM UsedCevap, kaynağa uygulanan fark işlemlerinin sonucudur.

3xx yönlendirme kodları nelerdir?

3xx kodları istemciye başka bir adrese gitmesini söyler. Arama motoru optimizasyonu açısından en kritik sınıf budur, çünkü kalıcı ve geçici yönlendirme arasındaki fark sıralama değerinin aktarılıp aktarılmayacağını belirler.

KodAdAnlamı
300Multiple ChoicesKaynağın birden fazla sürümü var, istemci seçmeli.
301Moved PermanentlyKaynak kalıcı olarak taşındı. Alan adı ve adres yapısı değişikliklerinde kullanılır.
302FoundGeçici yönlendirme. Tarayıcılar çoğunlukla yöntemi GET olarak değiştirir.
303See OtherSonucu başka adresten GET ile al. Form gönderiminden sonra tekrar gönderimi önler.
304Not Modifiedİçerik değişmedi, önbellekteki kopya kullanılabilir.
305Use ProxyKullanımdan kaldırıldı, güvenlik nedeniyle tarayıcılar desteklemez.
306KullanılmıyorEski bir taslakta tanımlıydı, numara ayrılmış durumda.
307Temporary RedirectGeçici yönlendirme; istek yöntemi ve gövde korunur.
308Permanent RedirectKalıcı yönlendirme; istek yöntemi ve gövde korunur.

Pratik kural: sayfa kalıcı taşındıysa 301, POST isteğinin de aynen taşınması gerekiyorsa 308 kullanın. Geçici durumlarda 302 veya 307 yeterlidir.

4xx istemci hata kodları nelerdir?

4xx kodları sorunun istekte olduğunu söyler. Adres yanlıştır, yetki yoktur veya gönderilen veri hatalıdır. Aynı isteği değiştirmeden tekrarlamak genellikle sonucu değiştirmez.

KodAdAnlamı
400Bad Requestİstek bozuk veya anlaşılamıyor.
401UnauthorizedKimlik doğrulaması gerekli veya başarısız.
402Payment Requiredİleride kullanılmak üzere ayrıldı; bazı servisler ödeme gerektiren durumlarda kullanır.
403ForbiddenSunucu isteği anladı ama erişime izin vermiyor.
404Not Foundİstenen kaynak bulunamadı.
405Method Not AllowedBu adres kullanılan istek yöntemini desteklemiyor.
406Not AcceptableSunucu, istemcinin kabul ettiği biçimde içerik üretemiyor.
407Proxy Authentication RequiredÖnce vekil sunucuda kimlik doğrulanmalı.
408Request Timeoutİstemci isteği zamanında tamamlamadı.
409Conflictİstek kaynağın mevcut durumuyla çakışıyor. Aynı kaydın iki kez eklenmesi tipik örnektir.
410GoneKaynak kalıcı olarak kaldırıldı ve geri gelmeyecek.
411Length RequiredContent-Length başlığı zorunlu.
412Precondition Failedİstek başlıklarındaki ön koşul sağlanmadı.
413Content Too LargeGönderilen veri sunucu sınırını aşıyor.
414URI Too LongAdres sunucunun işleyebileceğinden uzun.
415Unsupported Media TypeGönderilen içerik türü desteklenmiyor.
416Range Not Satisfiableİstenen bayt aralığı dosyanın dışında.
417Expectation FailedExpect başlığındaki beklenti karşılanamıyor.
418I'm a teapotNisan şakası olarak doğdu, resmi olarak kullanılmayan numara.
421Misdirected Requestİstek, cevap üretemeyecek bir sunucuya yönlendi.
422Unprocessable ContentBiçim doğru ama içerik doğrulamadan geçemedi.
423LockedWebDAV; kaynak kilitli.
424Failed DependencyWebDAV; bağlı olduğu önceki işlem başarısız oldu.
425Too EarlySunucu, tekrar oynatılabilecek erken veriyi işlemek istemiyor.
426Upgrade Requiredİstemci farklı bir protokole geçmeli.
428Precondition RequiredSunucu koşullu istek zorunlu tutuyor.
429Too Many Requestsİstek sınırı aşıldı, bir süre beklenmeli.
431Request Header Fields Too Largeİstek başlıkları çok büyük. Şişmiş çerezler sık görülen nedendir.
451Unavailable For Legal Reasonsİçerik yasal nedenlerle erişime kapalı.

401 ile 403 arasındaki fark nedir?

401, sunucunun sizi tanımadığını söyler; giriş yaparsanız sonuç değişebilir. 403 ise sizi tanısa bile bu kaynağa izin vermediğini bildirir. Giriş yapmış bir kullanıcı yönetici sayfasına girmeye çalışıyorsa doğru cevap 403 olur.

400 ile 422 ne zaman kullanılır?

JSON bozuksa veya zorunlu parametre hiç gelmediyse 400 uygundur. JSON düzgün ama e-posta alanı geçersizse ya da tarih mantıksızsa 422 daha açıklayıcıdır. Bu ayrım, istemci geliştiricisinin hatayı nerede arayacağını doğrudan gösterir.

5xx sunucu hata kodları nelerdir?

5xx kodları isteğin geçerli olduğunu ama sunucunun cevap üretemediğini gösterir. Sorumluluk site sahibindedir ve çözüm neredeyse her zaman sunucu loglarında başlar.

KodAdAnlamı
500Internal Server ErrorGenel sunucu hatası; kod veya yapılandırma sorunu.
501Not ImplementedSunucu bu istek yöntemini desteklemiyor.
502Bad GatewayAra sunucu, arkadaki sunucudan geçersiz cevap aldı.
503Service UnavailableSunucu geçici olarak hizmet veremiyor; bakım veya aşırı yük.
504Gateway TimeoutAra sunucu, arkadaki sunucudan zamanında cevap alamadı.
505HTTP Version Not Supportedİstekte kullanılan HTTP sürümü desteklenmiyor.
506Variant Also Negotiatesİçerik pazarlığında döngüsel yapılandırma hatası.
507Insufficient StorageWebDAV; sunucuda işlem için yeterli alan yok.
508Loop DetectedWebDAV; işlem sırasında sonsuz döngü tespit edildi.
510Not Extendedİstek için gereken uzantılar eksik; tarihsel bir koddur.
511Network Authentication RequiredAğa erişim için giriş gerekli. Otel ve kafe ağlarındaki karşılama sayfaları bunu kullanır.

Resmi olmayan ama sık görülen kodlar hangileridir?

Bazı sunucu yazılımları ve içerik dağıtım ağları kendi kodlarını tanımlar. Bunlar standartta yer almaz ama loglarda ve hata ekranlarında karşınıza çıkar.

KodKaynakAnlamı
444NginxSunucu cevap vermeden bağlantıyı kapattı.
499Nginxİstemci cevap gelmeden bağlantıyı kesti.
520CloudflareKaynak sunucu beklenmeyen bir cevap döndürdü.
521CloudflareKaynak sunucu bağlantıyı reddetti.
522CloudflareKaynak sunucuya bağlantı zaman aşımına uğradı.
523CloudflareKaynak sunucuya ulaşılamıyor.
524CloudflareBağlantı kuruldu ama cevap zamanında gelmedi.
525CloudflareSSL el sıkışması başarısız.
526CloudflareKaynak sunucudaki SSL sertifikası geçersiz.

En sık karşılaşılan hatalar nasıl çözülür?

404 Not Found neden çıkar?

En yaygın nedenler yanlış yazılmış bağlantı, silinmiş sayfa ve çalışmayan adres yeniden yazma kurallarıdır. Site taşıma sonrasında tüm iç sayfalar 404 veriyorsa ilk bakılacak yer .htaccess dosyasının yüklenip yüklenmediği ve mod_rewrite modülünün açık olup olmadığıdır.

403 Forbidden neden çıkar?

Sahada en sık gördüğümüz neden dosya izinleridir. FTP ile yüklenen klasörlerin izni 755, dosyaların izni 644 olmalıdır. Klasörde index dosyası yoksa ve dizin listeleme kapalıysa da 403 alınır. Güvenlik duvarı kuralları ve IP engelleri diğer olası kaynaklardır.

500 Internal Server Error nasıl giderilir?

Paylaşımlı sunucularda 500 hatasının büyük bölümü .htaccess dosyasındaki desteklenmeyen bir satırdan kaynaklanır. Dosyayı geçici olarak yeniden adlandırıp sayfayı denemek hızlı bir testtir. Sorun sürüyorsa PHP hata loguna bakılır; söz dizimi hatası, eksik eklenti veya bellek sınırı genellikle orada açıkça yazar.

502, 503 ve 504 arasındaki fark nedir?

502, öndeki sunucunun arkadaki servisten bozuk cevap aldığını gösterir; PHP-FPM servisi durmuş olabilir. 503, sunucunun bilinçli olarak veya yük nedeniyle hizmet vermediğini söyler. 504 ise arkadaki işlemin çok uzun sürdüğünü anlatır; ağır raporlar ve uzun süren dış servis çağrıları tipik nedenlerdir.

429 Too Many Requests alınca ne yapılır?

İstemci tarafında cevaptaki Retry-After başlığı okunmalı ve o süre kadar beklenmelidir. Bot yazarken istekler arasına gecikme koymak ve hata alındığında bekleme süresini katlayarak artırmak engellenmenin önüne geçer.

PHP ile doğru durum kodu nasıl döndürülür?

PHP varsayılan olarak her cevaba 200 kodu verir. Kayıt bulunamadığında ekrana yalnızca mesaj yazmak yetmez; kodun da değişmesi gerekir.

<?php
$yazi = yaziGetir($slug);

if (!$yazi) {
    http_response_code(404);
    require __DIR__ . '/404.php';
    exit;
}

// Kalıcı yönlendirme
header('Location: ' . BASE_URL . '/yeni-adres', true, 301);
exit;

JSON API cevaplarında da aynı ilke geçerlidir:

<?php
http_response_code(422);
header('Content-Type: application/json; charset=utf-8');
echo json_encode([
    'hata'  => 'E-posta adresi geçersiz',
    'alan'  => 'eposta'
]);

Apache üzerinde özel hata sayfaları .htaccess ile tanımlanır:

ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
ErrorDocument 500 /500.html

Durum kodları arama motorlarını ve yapay zeka botlarını nasıl etkiler?

Botlar sayfa içeriğinden önce durum koduna bakar. Yanlış kod, doğru içeriğin dizine girmesini engelleyebilir veya silinmiş bir sayfanın aylarca dizinde kalmasına yol açabilir.

  • Sahte 404: Bulunamadı mesajı gösterip 200 kodu döndürmek en yaygın hatadır. Bot sayfayı geçerli sanır ve boş içeriği dizine ekler.
  • 301 ve 302 karışıklığı: Kalıcı taşımada 302 kullanılırsa eski adres dizinde kalmaya devam edebilir.
  • 410 tercihi: Geri gelmeyecek içerikler için 410, sayfanın dizinden çıkarılması gerektiğini 404 koduna göre daha net bildirir.
  • Bakım modu: Planlı bakımda 503 ve Retry-After başlığı kullanılmalıdır. Bakım sayfasını 200 ile sunmak, botun bakım metnini asıl içerik olarak kaydetmesine neden olur.
  • Yönlendirme zinciri: Art arda birkaç yönlendirme tarama bütçesini tüketir. Her eski adres doğrudan son adrese gitmelidir.
  • Sürekli 5xx: Uzun süren sunucu hataları botların tarama sıklığını düşürmesine yol açar.

Düzenli kontrol için sunucu erişim loglarını durum koduna göre süzmek yeterlidir. Haftada bir 404 ve 5xx satırlarına göz atmak, kırık bağlantıları ve sessizce bozulan sayfaları kullanıcıdan önce fark etmenizi sağlar. Benzer pratik rehberler için Teknik Zeka Net ana sayfasındaki web programlama yazılarına bakabilirsiniz.

Sık Sorulan Sorular

HTTP hata kodu ile durum kodu aynı şey midir?
Durum kodu genel addır ve 1xx ile 5xx arasındaki tüm cevapları kapsar. Hata kodu denildiğinde yalnızca 4xx ve 5xx sınıfları kastedilir. Yani her hata kodu bir durum kodudur ama her durum kodu hata değildir.
404 hatası siteye zarar verir mi?
Gerçekten var olmayan sayfaların 404 döndürmesi normaldir ve tek başına zarar vermez. Sorun, iç bağlantıların veya değerli dış bağlantıların 404 veren adreslere gitmesidir. Bu durumda ilgili adres uygun sayfaya 301 ile yönlendirilmelidir.
301 ile 308 arasındaki fark nedir?
İkisi de kalıcı yönlendirmedir. 301 kullanıldığında tarayıcılar POST isteğini GET olarak değiştirebilir. 308 istek yöntemini ve gövdeyi aynen korur. Normal sayfa taşımalarında 301, form veya API uç noktası taşımalarında 308 tercih edilir.
500 hatasının nedenini nasıl bulurum?
Sunucunun hata loguna bakmak en hızlı yoldur. Paylaşımlı sunucuda bu dosya genellikle kontrol panelindeki log bölümünde veya site kökündeki error_log dosyasında bulunur. Geliştirme ortamında PHP hata gösterimini açmak sorunu doğrudan ekrana yansıtır; canlı sitede ise gösterim kapalı, loglama açık tutulmalıdır.
503 hatası kalıcı mıdır?
Hayır, 503 tanımı gereği geçici bir durumdur. Bakım, aşırı yük veya kaynak sınırı aşımı sırasında görülür. Sunucu Retry-After başlığı gönderiyorsa istemci ne kadar beklemesi gerektiğini bilir. Sorun günlerce sürerse arama motorları sayfayı dizinden düşürmeye başlayabilir.
418 kodu gerçekten kullanılıyor mu?
418 bir nisan şakası belgesinden doğdu ve gerçek bir protokol işlevi yoktur. Güncel standartta kullanılmayan, ayrılmış numara olarak yer alır. Bazı siteler bot isteklerini reddederken mizahi biçimde bu kodu döndürür ama üretim ortamındaki bir API için uygun bir seçim değildir.
Ramazan Yeşildal
Ramazan Yeşildal

Karaman merkezli bilgi teknolojileri yöneticisi ve bağımsız yazılım geliştirici.

0 Yorum

Yorum yazın

E-posta adresiniz yayınlanmaz. Yorumlar onaydan sonra görünür.