HTTP’e Giriş
HTTP(Hypertext Transfer Protocol) OSI modelinde uygulama katmanında yer alan iletişim protokolüdür. Günümüzde zamanımızın çoğunu geçirdiğimiz sanal dünyada en sık kullanılan protokoldür. (%96 civarında)
HTTP Nasıl Çalışır?
Http’nin istemci-sunucu mantığıyla çalışan basit bir yapısı vardır. Önce TCP bağlantısı açılır, kullanıcı istek(HTTP isteği) gönderir sunucu da buna uygun cevap döner ve TCP bağlantısı kapatılır.
İstemci(kullanıcı) tarafından gönderilen istekler birbirinden bağımsızdır ve normalde her HTTP isteği için bir TCP bağlantısı gerekir.
HTTP’nin basitliğinin yanında günümüz web sayfaları sadece http sunuculardan oluşmaz, çoğu sistemin bilgilerini tutmak için kullanılan veritabanları da artık web sayfalarının vazgeçilmez bileşeni olmuştur.
Yukarıdaki resim klasik bir web sayfasını temsil eder. Buna göre web sayfalarımız ister web sunucuyla aynı makinede olsun ister başka bir makinede olsun bir veritabanına bağımlıdır.
Web’in çalışma mantığı istek ve cevaplardan oluşur, istekler ve bunlara dönülecek cevaplar farklıdır. Bu konuda detay için HTTP RFC’si 2616 incelenebilir.
Yapılan isteğin çeşidine göre sunucudan dönecek cevap da farklı olacaktır. Mesela istenen dosya sistem üzerinde yoksa 404 cevabı, gelen istek izni olmayan bir dosyayı istiyorsa 403 forbidden cevabı dönecektir.
HTTP ve TCP ilişkisi
HTTP TCP kullanan bir protokoldür. Her HTTP bağlantısı öncesinde mutlaka TCP bağlantısı kurulmalıdır. Basit bir hesapla her HTTP bağlantısı için ortalama 10 adet TCP paketi gidip gelmektedir(3 adet TCP bağlantı başlangıcı, 4 adet TCP bağlantı koparılması, 2-3 adet de HTTP isteği ve buna dönecek cevap paketlerinin taşındığı TCP paketleri).
Bu da klasik HTTP kullanımında performans sorununu beraberinde getirir. Günümüzde normal bir haber portalının yüklenmesi için ortalama 40-50 HTTP GET isteği gönderilmektedir. Bunu da hesaplarsak portal sayfasının açılması için ortalama 50X10=500 TCP paketinin gidip gelmesi gerekir ki bu değer haber kullanıcıyı okumaktan vazgeçirecek kadar fazladır.
HTTP’de bu performans sorununu aşabilmek için çeşitli yöntemler geliştirilmiştir. Bunların başında HTTP KeepAlive(persistent connection) özelliği gelmektedir. HTTP Keep Alive özelliği her HTTP isteği için ayrı bir TCP bağlantısı açmak yerine bir adet TCP bağlantısı içerisinden belirli sayıda (5, 10, ..) HTTP isteğinin aktarılabilmesini sağlar.