📋 A6 · Header'lar: Content-Type, Accept, Authorization

A6 · Header'lar: Content-Type, Accept: Header'lar, bir kargonun üstündeki **etiketler ve gümrük evraklarıdır**: paketin içine (body) dokunmadan "bu ne, nasıl açılmalı, kim gönder

Header'lar, bir kargonun üstündeki **etiketler ve gümrük evraklarıdır**: paketin içine (body) dokunmadan "bu ne, nasıl açılmalı, kim gönderiyor, saklanabilir mi" sorularını cevaplarlar. **Content-Type** = "içerideki paket JSON'dır" (sunucu böyle ayrıştırır), **Accept** = "bana JSON dilinde cevap ver" (istemcinin tercihi), **Authorization** = "kimliğim bu" (Bearer token), **Cache-Control** = "bu paketi saklama / şu kadar sakla". Peki veri zaten body'de gidiyorsa, bu görünmez etiketler neden bu kadar önemli? Çünkü header yanlış/eksikse body doğru olsa bile işlem çöker: `Content-Type` eksikse sunucu JSON'ı düz metin sanır, `Authorization` eksikse 401 alırsın, `Cache-Control` yanlışsa eski veri önbellekten döner ve testin "phantom" bir bug görür. Java'da bunun karşılığı `@RequestHeader` ve `HttpHeaders`'tır; header'lar metot parametresi gibi davranışı yönlendirir. QA açısından header'lar en sinsi bug kaynağıdır çünkü GÖRÜNMEZLER: Postman'de çalışan bir request, otomasyonda header unutulduğu için düşer ve saatlerce "kod aynı ama sonuç farklı" diye debug edilir.

Bir Testerın Bilmesi Gereken Dört Header

🎬 Görünmez Suçlu: Postman'de Çalışıp Otomasyonda Düşen Request

Aynı POST /api/v1/bugs request'i Postman'de 201 döner ama otomasyon testinde 400 verir. Kod aynı — fark ne?

Postman, gövdeyi "raw JSON" seçtiğinde `Content-Type: application/json` header'ını SESSİZCE ekler — sen görmezsin ama gönderilir.

Otomasyon kodu bu header'ı ELLE eklemeyi unutur. Sunucu gövdeyi JSON sanmaz, boş görür ve "title zorunlu" diyerek 400 döner.

Saatlerce "kod doğru ama düşüyor" diye debug edilir. Suçlu görünmez bir header eksikliğidir — body'de değil.

Ders — GUI araçları header'ları senin için ekleyebilir; otomasyonda hiçbir şey "otomatik" değildir. İki ortamı karşılaştırırken önce header'lara bak.

Authorization Header'ı Neden 401'in Anahtarıdır?

Bearer token gönderilir…

`Authorization: Bearer ` header'ı request'in kimliğini taşır — sunucu bununla "sen kimsin"i bilir.

Header yoksa sunucu kimliği çözemez ve 401 döner — body ne kadar doğru olursa olsun.

Token süresi dolmuşsa da 401…

Token varsa ama süresi dolmuşsa yine 401 gelir — tester "eksik mi, süresi mi doldu?" ayrımını yapmalıdır.