# HTTP Durum Kodları Referansı

> Yaygın HTTP durum kodlarının anlamı ve tipik kullanım yeri. Kodu, adı ya da anahtar kelimeyi yazarak ara. Tarayıcıda çalışır, arama dışarı gönderilmez.

- Tür: Araçlar
- Kategori: Referans
- Yayın: 2026-04-08
- Güncelleme: 2026-08-30
- Etiketler: http, reference
- Kaynak: https://muhammetsafak.com/tr/muhendislik/araclar/http-status/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
> Bu araç tarayıcınızda çalışır. Veriler dışarı çıkmaz.

HTTP durum kodları üç haneli, ilk hane sınıfı belirtir:

- **1xx — Informational**: Sürüyor (nadiren görülür).
- **2xx — Success**: İstek başarılı.
- **3xx — Redirection**: İsteğin tamamlanması için istemcinin ek bir adım atması gerekir.
- **4xx — Client Error**: İstekte sorun var.
- **5xx — Server Error**: Sunucuda sorun var.

## Sık karıştırılanlar

**401 vs 403**:
- `401 Unauthorized` — "kimliğini doğrulayamadım" (login gerek).
- `403 Forbidden` — "kimliğini biliyorum ama bu kaynağa yetkin yok".

**422 vs 400**:
- `400 Bad Request` — istemci kaynaklı bir sorun var, en tipik hâli bozuk sözdizimi
  (örn. bozuk JSON).
- `422 Unprocessable Content` — syntax doğru ama anlam geçersiz (örn. e-posta
  alanında "abc"). Laravel, JSON/XHR isteklerinde default validation hatalarını 422 ile
  döndürür.

**301 vs 308**:
- `301 Moved Permanently` — kalıcı yönlendirme. Fetch Standard'ı izleyen güncel
  istemciler POST'u GET'e düşürür, yani metot korunmaz.
- `308 Permanent Redirect` — kalıcı yönlendirme, metodu **korur**. POST'u POST
  olarak yeniden yönlendirir.

**502 vs 503 vs 504**:
- `502 Bad Gateway` — upstream geçersiz yanıt verdi (örn. PHP-FPM crash).
- `503 Service Unavailable` — sunucu geçici olarak yanıt veremiyor (planlı bakım, aşırı
  yük).
- `504 Gateway Timeout` — upstream zaman aşımına uğradı (yavaş worker).

## Idempotency

Bir metodun **idempotent** olması, aynı isteğin defalarca yapılmasının yan etkiyi
değiştirmemesi anlamına gelir:

- `GET`, `PUT`, `DELETE`, `HEAD`, `OPTIONS` — idempotent.
- `POST`, `PATCH` — genelde idempotent değil.

Idempotent metotlar 5xx hatasından sonra **otomatik retry edilebilir**.
Idempotent olmayanlar (örn. ödeme alma) retry için `Idempotency-Key` header'ı
gibi mekanizmalar gerektirir.

## Yaygın anti-pattern'ler

- **`200 OK` ile hata döndürmek** — `{"error": "..."}` formatında. REST
  istemcileri için kötü; durum kodunu kullanın.
- **`404` ile yetki hatası gizlemek** — "bu kaynağın var olup olmadığını sızdırmak
  istemiyorum". Çoğu durumda 403 veya 401 daha açık bir yanıt. RFC 9110 yetkisiz bir
  kaynağı gizlemek için 403 yerine 404 dönmeye izin veriyor; bunu alışkanlık değil,
  bilinçli bir tercih olarak yapın.
- **`500` her yerde** — daha açıklayıcı kodlar var (422, 502, 503, 504). 500
  sadece beklenmedik exception için.

## Kaynaklar

- [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110) — HTTP semantics.
- [MDN HTTP Status Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status).

## Gizlilik

Bu statik bir referans. Arama kutusuna yazdığınız her şey tamamen tarayıcınızda çalışır
ve dışarı çıkmaz — kutunun arkasında sunucu sorgusu yok.
