Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

HTTP header nedir?​


HTTP header, istemci ile web sunucusunun HTTP isteği veya yanıtı hakkında taşıdığı anahtar-değer biçimindeki ek bilgidir. İstenen kaynağın kendisi genellikle gövdede bulunurken header alanları; içerik türünü, önbellek davranışını, kimlik doğrulama bilgisini, istemci tercihlerini ve yanıtın nasıl işleneceğini belirtir. Örneğin tarayıcı bir sayfa isterken Accept gönderir; sunucu yanıt verirken Content-Type ve Cache-Control gönderebilir.

İstek ve yanıt header'ları nasıl çalışır?​


HTTP alanlarını, hangi yönde taşındığına göre ayırabilirsiniz:

  • İstek header'ları: Tarayıcı veya başka bir istemci sunucuya gönderir. Kabul edilen içerik biçimleri, oturum bilgisi ve istemci tercihleri burada bulunabilir. HTTP/1.1’de yöntem ve istenen yol, header değil başlangıç satırındadır.
  • Yanıt header'ları: Sunucu istemciye gönderir. Dönen içeriğin türü, önbellek kuralları, çerezler ve güvenlik politikaları gibi bilgiler burada yer alır. HTTP/1.1 durum kodu ise ayrı durum satırındadır.

Header adları büyük-küçük harfe duyarlı değildir; ancak değerleri kendi kurallarına göre yorumlanır. Aynı isimli bazı header'lar birden fazla kez gönderilebilirken bazıları tek bir birleşik değer bekler. Bu nedenle elle header eklerken kullandığınız web sunucusunun veya uygulama çatısının kurallarını dikkate alın.

Örneğin istemci şu isteği gönderebilir:

Kod:
GET /urun.html HTTP/1.1
Host: example.com
Accept: text/html
Accept-Language: tr

Sunucu da buna benzer bir yanıt verebilir:

Kod:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Cache-Control: max-age=600

<!doctype html>...

İlk satır durum bilgisidir. Ardından gelen satırlar header'lardır; boş satırdan sonra gelen bölüm ise yanıt gövdesidir. Bu örnekte Content-Type, gövdenin HTML olduğunu; Cache-Control ise istemci ve ara önbelleklerin içeriği belirli bir süre yeniden kullanabileceğini anlatır.

Sık kullanılan header'lar ve kararları​


Aşağıdaki tablo, bir header gördüğünüzde neyi kontrol etmeniz gerektiğini özetler:

HeaderGenellikle neredeAmacıKontrol noktası
Hostİstekİstenen alan adını belirtirSanal host ve DNS yönlendirmesi doğru mu?
Content-Typeİstek veya yanıtGövdenin veri biçimini belirtirUygulama gönderilen biçimi gerçekten bekliyor mu?
AuthorizationİstekKimlik doğrulama bilgisini taşırGizli değerleri günlüklerde açığa çıkarmayın
Cache-ControlÇoğunlukla yanıtÖnbellekleme davranışını belirlerDeğişken veya özel içerik yanlış önbelleğe alınmasın

Header seçerken amaç, istemci ile sunucunun aynı içeriği aynı kuralla yorumlamasını sağlamaktır. Bir form isteğinde gövde JSON ise Content-Type: application/json gerekebilir; yanıt HTML ise sunucunun Content-Type değerinin HTML'i göstermesi beklenir. Kullanıcıya özel yanıtta ortak önbelleği engelleyen private veya saklama gerekmiyorsa no-store gibi uygun bir politika seçilir; yalnız max-age vermek gizlilik ihtiyacını açıklamaz.

Header'ları pratikte inceleme​


Örnekler HTTP/1.1’in okunabilir metin gösterimidir. HTTP/2 ve HTTP/3’te başlıklar farklı çerçeveleme ve sıkıştırmayla taşınır; :method ve :status gibi özel pseudo-header alanları da bulunur. Araçların okunabilir görünümü, bağlantının bire bir ham tel biçimi olmak zorunda değildir.

Bir web sunucusunun yanıt alanlarını komut satırından inceleyebilirsiniz:

  1. Terminali açın ve şu komutu çalıştırın:
    Kod:
    curl -I https://example.com
  2. Çıktıda HTTP/ ile başlayan durum satırını, Content-Type, Cache-Control ve varsa yönlendirme ile ilgili header'ları inceleyin.
  3. Başarılı bir bağlantıda durum satırı ve header satırları görünür. Could not resolve host benzeri bir hata alan adı çözümlemesine; bağlantı zaman aşımı ise ağ, güvenlik duvarı veya sunucu erişimine işaret eder.
  4. Uygulamanın ürettiği özel yanıtı kontrol ediyorsanız CDN, ters proxy veya web sunucusunun header'ı değiştirip değiştirmediğini ayrı ayrı doğrulayın.

curl -I HEAD isteği yapar; sayfayı GET ile isteyen tarayıcıyla her sunucuda aynı sonuç çıkmayabilir. GET yanıtının başlıklarını gövdeyi saklamadan incelemek için curl -sS -D - -o NUL https://example.com Windows’ta kullanılabilir; Unix benzeri sistemde NUL yerine /dev/null yazın. Yönlendirme varsa ilk yanıtı ve Location alanını ayrıca okuyun.

Bu işlem yanıt alanlarını gösterir; uygulamanın tarayıcıdan hangi istek header'larını gönderdiğini görmek için tarayıcının geliştirici araçlarında ağ isteğini seçip Request Headers ve Response Headers bölümlerini karşılaştırın. Header'daki bir değer beklenenden farklıysa önce isteği üreten uygulamayı, ardından web sunucusu ve proxy katmanlarını kontrol edin.

Sık yapılan hatalar​


  • Header ile gövdeyi karıştırmak: Header, dosyanın veya JSON verisinin kendisi değildir; verinin nasıl yorumlanacağını bildirir.
  • Her header'ı uygulama kodundan zorla eklemek: Web sunucusu veya proxy zaten aynı alanı üretiyorsa çakışan ya da tekrarlanan değerler oluşabilir.
  • Gizli bilgileri yanlış header'a koymak: Kimlik bilgileri istemciye gönderilen yanıtlara veya herkese açık günlük kayıtlarına eklenmemelidir. Bir header'ın HTTPS üzerinden taşınması, uygulamanın onu günlüklerde veya istemci tarafında görünmez yaptığı anlamına gelmez.
  • Yalnızca tarayıcıdaki sonucu kontrol etmek: Önbellek ve proxy katmanları farklı davranabileceği için gerektiğinde doğrudan sunucu yanıtını da inceleyin.

Header sorununu çözerken önce hangi tarafın header'ı ürettiğini belirleyin: tarayıcı, uygulama, web sunucusu, ters proxy veya CDN. Sonra tek bir isteğin ham yanıtını karşılaştırın; aynı header'ın birden fazla katmanda değiştirilmesi teşhisi zorlaştırır.

Sık sorulan sorular​


HTTP header ile HTTP durum kodu aynı şey midir?​


Hayır. 200, 404 veya 500 gibi kodlar HTTP/1.1’de yanıtın genel durumunu bildiren durum satırının parçasıdır. HTTP/2 ve HTTP/3 aynı anlamı özel :status alanıyla taşır. Header'lar ise bu durumun yanında içerik ve işlem kurallarını taşır.

Bir header'ı değiştirmek sayfanın içeriğini de değiştirir mi?​


Tek başına her zaman değiştirmez. Ancak Accept, Accept-Language veya Authorization gibi header'lar sunucunun hangi içeriği ya da erişim sonucunu üreteceğini etkileyebilir.

Header'ları kullanıcılar görebilir mi?​


İstemciye gönderilen yanıt header'larının önemli bölümü tarayıcı geliştirici araçlarında ve komut satırı araçlarında görülebilir. Bu nedenle parolaları veya uzun süreli gizli anahtarları yanıt header'larına koymayın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.