5 Mart 2015 Perşembe

Bir HTTP request mesajının anatomisi


GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache

Yukarıda örnek bir HTTP GET request mesajı görüyoruz. Bu mesajı satır satır inceleyelim.

Request line

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1

1.satırda GET metodu ile servera bir web sayfası almak istediğimizi belirtiyoruz. 
GET metodunu takip eden adreste yani "Request-uri" kısmında da hangi adresteki sayfayı istediğimizi söylüyoruz. 
En sondaki HTTP/1.1 ile de formalite icabı istemci olarak kullandığımız HTTP versiyonunu servera bildiriyoruz.

Host

Host: net.tutsplus.com

2.satırda Host headerı ile DNS domain name belirterek hangi domain'den bu sayfayı istediğimize açıklık getiriyoruz.

Bunun sebebi aynı serverda birden fazla domain host ediliyor olabilir. Bu yüzden de serverın hangi domain'i kastettiğimizi bilmesi gerekiyor.
İşte tam olarak bu zorunluluktan dolayı sunucuya yapılan isteklerde bulunması gereken Request line dışındaki tek zorunlu header Host headerıdır.

Bu bilgiyi 1.satırdaki path ile birleştirince URL ortaya çıkıyor.

User-Agent

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)

Burada browserın ne olduğu ver versiyon bilgisi veriliyor.

Accept

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Burada hangi içerik türlerini kabul ettiğimizi belirtiyoruz.

Accept-language

Accept-Language: en-us,en;q=0.5

Burada hangi dilleri kabul ettiğimizi belirtiyoruz.

Accept-charset

Accept-Encoding: gzip,deflate

Burada kabul ettiğimiz karakter seti bildiriyoruz.

Keep-alive

Keep-Alive: 300

Burada belirtilen süre boyunca yeniden tcp connection oluşturmaya gerek kalmadan istekte bulunabilmek istediğimizi belirtiyoruz (= HTTP pipelining).
Eğer keepalive değeri belirtmezsek her istekte tekrardan yeni bir tcp bağlantısı oluşturulur.

Connection

Connection: keep-alive

Burada tcp bağlantısını keepalive headerinda belirttiğimiz şekilde açık tutmak istediğimizi belirtiyoruz. Eğer connection: close olsaydı hemen bağlantı kapatılacaktı.

Cookie

Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120

Burada bir cookie bilgisi gönderiyoruz.


Pragma

Pragma: no-cache


Cache-control

Cache-Control: no-cache


Bir başka request örneği:


GET /docs/index.html HTTP/1.1
Host: www.test101.com
Accept: image/gif, image/jpeg, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
(blank line)

Bu mesajda Request line ve Host dışında opsiyonel headerlardan 4 tanesi eklenmiş.
İlk iki satır ile istediğimiz sayfanın URLsini host ile request-uri yi birleştirerek görebiliriz:
www.test101.com/docs/index.html sayfasını istiyoruz.

Accept headerı ile kabul edilen dosya türleri arasında gif ve jpeg imajları da bulunduğunu,
Accept-language headerı ile en-us dilini kabul ettiğimizi,
Accept-encoding headerı ile gzip, deflate kodlama türlerini kabul ettiğimizi,
User-Agent headerı ile de Mozilla 4.0 tarayıcısı kullandığımızı ,
servera bildiriyoruz.

Boş satır ile de mesaj son buluyor.

Hiç yorum yok:

Yorum Gönder