29 Mayıs 2012 Salı

HTTP - Nass oluyor da oluyor? HTTP Headerlar ve HTTP Mesaj Yapısı

HTTP mesajları istemcinin erişim isteğini (Request), sunucunun ise yanıtını (Response) taşıyan basit yapılı mesajlardır ve 3 kısımdan oluşur.
İlk satır istek mesajlarında Request Line, yanıt mesajlarındaysa Status Line adını alır.
İstek mesajlarında 
<metod> <istek-yapilan-url> <versiyon>
Yanıt mesajlarındaysa
<versiyon> <durum> <durum-açiklamasi>
bilgilerini taşır.

Metod : Sunucudan yapılması istenen işlemi belirtir. Sadece HTTP Request mesajlarında bulunurlar.PUT ve POST  metodları dışındaki metodları içeren mesajlar içerik (body) bulundurmaz.Yaygın istek metodları tablodaki amaçlar için kullanılır.

MetodAçıklama
GETSunucudan dosya/veri alma
HEADSunucudan bir verinin/dosyanın sadece Header değerlerini alma
POSTSunucuya veri gönderme
PUTSunucuya dosya gönderme
TRACETest ve sorun çözme amacıyla,sunucuya gönderilen istek mesajının sunucu tarafından tekrar geri gönderilmesi (böylece arada proxy olup olmadığı, proxynin ne tip değişiklikler yaptığı tespit edilebilir)
OPTIONSSunucuya gönderilecek isteklerde kullanılabilecek seçenekler ve yöntemleri tespit etme
DELETESunucudan dosya/döküman silme

Bu metodlardan
Bu metodların bir kısmı (TRACE,PUT,HEAD,OPTIONS,DELETE) sunucu tarafında güvenlik riski oluşturduğu için engellenir, engellenmelidir. GET ve POST metodlarına izin vermek çoğu zaman web hizmeti sunmak için yeterlidir.
İstek Yapılan URL : İstemcinin erişmek istediği sunucu kaynağını - ki bu bir html/asp/aspx/jsp,düz metin, resim,video dosyası olabilir - belirtir. "/" varsayılan döküman anlamına gelir.
Versiyon : Mesajın hangi HTTP versiyonunu kullandığı
Durum : İsteğin sonucu 3 haneli sayısal kodalarla istemciye bildirilir.
100-101 arası sayısal kodlar sonucun bilgi amaçlı olduğunu
200-206 aralığı sonucun başarılı olduğunu
300-305 aralığı yönlendirme olduğunu
400-415 aralığı istemci hatasını
500-505 aralığı sunucu hatasını gösterir.
Durum Açıklaması (Reason-phrase) : Durum kodunun anlamlı açıklamasıdır.
Request/Status satırı sonundaki Carriage Return (ASCII 13, Hexadecimal 0d) & Line Feed (ASCII 10, Hexadecimal 0a) ( CRLF) karakteri ,bu bölümü sonraki "Header" bölümünden ayırır.

Header'lar request ve response mesajlarında fazladan bilgi taşınmasını sağlar,istemci erişmek istediği kaynağı ve erişim metodunu belirttikten sonra erişimin nasıl olacağı "Header" yani başlık alanlarındaki bilgiler vasıtasıyla karşı tarafa bildirilir."Başlık Alanı:Değer" den ibarettir aslına bakılırsa. Genel başlık alanları (General Headers),istek başlık alanları (Request Headers),yanıt başlık alanları (Response Headers), varlık başlık alanları (Entity Headers), ilave başlık alanları (Extension Headers) ana başlıkları altında değerlendirilirler.Kimlik doğrulama hakkındaki yazılarda "Authentication" ve "Authorization" headerlardan sıkça bahsedeceğim.
Request/Status Line'da olduğu gibi her Header satırı da CRLF karakterleriyle son bulur.Header bölümü ile mesajın içeriği (Body) arasında yine CRLF karakter kombinasyonuyla ifade edilen boş bir satır bulunur.
"Body" yani içerik alanı, HTTP mesajlarının varolma sebebidir. Text,resim,video gibi erişilmek istenen kaynağa ait veriler HTTP Request-Response mesajların çerik alanlarında taşınır.
HTTP mesajların yapısından bahsettikten sonra, IIS kurulumuyla gelen varsayılan web sitesine erişim için ne tip istek-yanıt (request-response) mesajları gönderilmiş sıcağı sıcağına inceleyelim.
İlk ekran görüntüsünde kırmızı alanlar Request Line ve Status Line olarak ifade edilen satırlar , Request Metodunu, erişilmek istenen URL'i, kullanılan HTTP versiyonunu ve sunucu tarafından gönderilen yanıtta da HTTP versiyonunu, durum kodunu ve durum kodunun anlaşılır açıklamasını gösteriyor.


Yeşil alanlar Request ve Response headerları,mavi alan ise içeriği (body) gösteriyor. Response Headerlar ile body arasındaki boş satıra dikkat edin. Benzer şekilde Request/Status satırları sonunda, Header satırları sonunda da CRLF karakterleri var. Wireshark'la bu karakterleri daha net görebiliriz.


Bu basit iletişimi incelemek isteyeler için paket dosyasını da ekliyorum



İlgili Yazılarım
HTTP - Nass oluyor da oluyor? 3-way-handshake
HTTP - Nass oluyor da oluyor? HTTP Basic Authentication
HTTP - Nass oluyor da oluyor? HTTP Windows Authentication
HTTP - Nass oluyor da oluyor? HTTP Digest Authentication
HTTP - Nass oluyor da oluyor? HTTPS - HTTP over SSL

Hiç yorum yok:

Yorum Gönder