Ana sayfa » HTTP Dediğimiz Şey Aslında Bir Protokol
Protokoller

HTTP Dediğimiz Şey Aslında Bir Protokol

http-nedir

HTTP NEDİR? NE İŞE YARAR?

Hatırlarsanız bundan önceki yazımızda günümüz internet dünyasının bel kemiği olan OSI mimarisini incelemiştik. Bilgisayarlarımız bu 7 katmanlı mimari sayesinde belirli bir düzen içinde haberleşebiliyor ve çeşitli görevleri yerine getirebiliyorlardı. Hatta bu haberleşme işlemini tanımlayan ve belirli bir düzene sokan kurallar bütününe protokol adını vermiştik. Her bir protokol farklı farklı iletişim ihtiyaçlarını düzenler ve yönetir. Mesela iki host arasındaki dosya aktarımı için FTP protokolü kullanılırken, mail sunucuları ile haberleşmek için SMTP protokolü kullanılır. Günümüz web uygulamaları arasındaki iletişimi sağlamak için ise konumuzun başrolü olan HTTP protokolü kullanılır. Bu kısa hatırlatmalardan sonra isterseniz HTTP protokolünü detaylı bir şekilde inceleyelim.

HTTP Protokolü

HTTP protokolü için günümüz web dünyasının kalbi desek herhalde yanlış olmaz. Çünkü web browserımızı açtığımız andan itibaren neredeyse en çok kullanılan protokoldür kendileri. Mesela bu websitesini bilgisayarınızda görüntüleyebilmeniz için bu sitenin barındırıldığı server ile bilgisayarınızın bir iletişim başlatıp dosya aktarımı yapması gerekmektedir. Şimdilik bu örneğin sizi tam olarak tatmin etmediğini biliyorum. Size daha tatmin edici örnekler sunabilmem için isterseniz biraz WEB TERMİNOLOJİSİNDEN bahsedelim. Ek olarak HTTP’nin taşıma katmanı protokolü olarak TCP’yi kullandığını ve 80 numaralı port üzerinden çalıştığını da belirtmeden geçmeyelim.

Web browserımızı açtığımız zaman sürekli web sayfaları ile haşır neşir oluruz. Bu sözü geçen web sayfaları bazı argümanlardan oluşur. Bu argümanlara; HTML dosyaları, JPEG, PNG, SVG gibi resim dosyaları, .js uzantılı javascript dosyaları, .css uzantılı CSS dosyaları örnek olarak verilebilir. Ve bu dosyalar da belirli bir ip adresine ve domaine sahip olan SERVER adını verdiğimiz sunucularda depolanır. Mesela kodputer adlı bu sitenin hakkımızda sayfasına ulaşmak için; web browserımızın adres satırına http://kodputer.com/hakkimizda/ yazmamız gerekir. Burada http:// kısmı protokolümüzün adını, kodputer.com host adını, /hakkimizda ise host adındaki ulaşmak istediğimiz sayfanın yolunu belirtiyor. İşte bu adresi yazdığımız anda web browserımız HTTP protokolünü kullanarak SERVER’dan kodputer.com’a ait olan hakkimizda sayfasının argümanlarını talep ediyor. Bu talebi inceleyen Server, uygun bulduğu takdirde bu talep edilen argümanları isteği yapan browsera geri gönderiyor. Bu terminolojide browserımız client-side olarak adlandırılırken sunucumuz ise server-side olarak adlandırılıyor. Web browserımızın yaptığı isteğe HTTP request, Serverdan gelen cevaba ise HTTP response adı veriliyor.

http protokolu

Bu terminoloji ve kavramlarda göz önüne alındığında HTTP protokolü için son olarak; web-client’in bir web sayfasını serverdan nasıl talep edeceğini ve talebi alan serverın talep edilen web sayfasına ait dökümanları bu web-client’e nasıl geri göndereceğini tanımlayan ve işleten kurallar bütünü diyebiliriz.

HTTP Mesaj Formatları

Şimdiye kadar hep web browserımızın HTTP protokolünü kullanarak server ile iletişime geçtiğini söyledik. Peki nasıl oluyorda bu protokol kullanılıyor? Bu protokol bünyesinde hangi komutları barındırıyor? Browserımız nasıl serverdan belirtilen URL’deki dosyayı istiyor ve bu server nasıl o dosyaları geri gönderiyor? İşte bu gibi soruların cevabı daha öncede bahsettiğimiz http request ve http response adı verilen mesaj formatlarının yapısında gizli. Lafı daha fazla uzatmadan http request yani http istek mesajımızın yapısını incelemeye başlayalım.

HTTP Request Message

Web browserımız tarafından servera gönderilen bu mesajımız 3 adet bölümden oluşuyor. Bunlar sırası ile;

  • Request line (İstek Bölümü)
  • Header line (Başlık Bölümü)
  • Entity Body (Varlık Bölümü)

Aşağıdaki örnek bir http request mesajı üzerinden, bu mesaj yapısını dikkatli bir şekilde inceleyelim;

http-request-message
HTTP istek mesajı örneği

İşte yukarıdaki görsel bizim sürekli bahsettiğimiz, browserımız tarafından servera gönderilen HTTP-REQUEST mesajımızın ta kendisi. Bu mesajımızın ilk kısmı olan request line 3 adet bölümden oluşur. Bunlar sırası ile;

  • Metod Bölümü (GET olan kısım)
  • URL Bölümü (/doc/test.html olan kısım)
  • HTTP versiyonu (Bu örnek için HTTP/1.1 versiyonu kullanılmış)

Request line kısmını kısa bir şekilde açıklayacak olursak GET bölümü, bize yapılacak işlemin türünü belirtiyor. Buraya isteğe göre POST, HEAD, PUT, DELETE gibi komutlar da gelebilir. GET’in türkçe anlamı getirmek, elde etmek demektir. Buradan da anlaşılacağı üzere servera belirtilen URL’yi getir komutu veriliyor. İkinci kısım olan URL kısmı, istenilen web sayfasının tam adresini belirtiyor. Üçüncü kısım ise bu işlemler yapılırken kullanılacak olan HTTP protokolünün versiyon numarasını belirtiyor.

Header line kısmı ise browserımızın yaptığı talebe göre değişir. Bazen 4-5 satır parametreden oluşurken bazen de 10-15 satır parametreden oluşabilir. Biz kısaca yukarıdaki örnek üzerinden verilen parametreleri inceleyelim. İlk olarak karşımıza host bölümü çıkıyor. Burası bizim istedeğimiz web sayfasının ana host isminin belirtildiği kısım. Yani http://kodputer.com/hakkimizda/ adlı örneğimizde buraya tekabül eden kısım kodputer.com‘dur. Accept kısmı; kabul edilecek dosya türlerini, Accept Language; kullanıcının sayfayı görüntülemek istediği dili, User-Agent; istek yapılan browser ile ilgili detayları, Content-Length ise yapılan isteğin karakter olarak uzunluğunu belirtir.

Entity line kısmına bakacak olursak; bu kısım genelde web sitelerindeki formlara girilen değerlerin neler olduğunu belirtmekte kullanılır. Mesela formlarda method olarak POST kullanıldığı zaman, formlara girilen ad, soyad, kullanıcı adı, şifre, mail gibi girdiler entity body kısmına kaydedilir.

HTTP Response Message

Server tarafından web browserımıza gönderilen mesaja ise http response adını veriyoruz. Bu mesaj formatımız aynı istek mesajında olduğu gibi 3 kısımdan oluşur. Bunlar;

  • Status line (Durum Bölümü)
  • Header lines (Başlık Bölümü)
  • Entity line (Varlık Bölümü)

Aşağıdaki örnek üzerinden http response mesaj formatını inceleyelim.

http cevap mesajı
HTTP cevap mesajı örneği

Burada istek mesaj formatındaki request line dan farklı olarak karşımıza status line adlı kısım çıkıyor. Bu status line kısmı bize yapılan istekle ilgili çeşitli bilgiler verir ve 3 bölümden oluşur. Bunlardan HTTP/1.1 olan kısım, browsera response mesajı gönderilirken kullanılan HTTP protokolünün versiyonunu verir. Sonraki 200 kısmı ise, alınan isteğin başarılı bir şekilde yerine getirilip gönderildiğini belirtir. Sonraki OK kısmı ise, 200 ile belirtilen durum kodunun human-readable formatta belirtilmiş halidir. Tabii tek durum kodu 200 değildir elbette. Mesela istenilen sayfanın bulunamadığı durumlarda 404 kodu geri gönderilir ve bunun human-readable formu, hepimizin de bildiği gibi Not Found‘dur.

Status line’dan sonraki kısım header line kısmıdır. Burada isteği yapan browser’ı bilgilendirme amaçlı bazı detaylar bulunur. Mesela birkaçını inceleyecek olursak; Content-Type kısmı, gönderilen mesajın formatını belirtir. Date kısmı, istenen dosyanın server tarafından ne zaman browser’a gönderildiğini belirtir. Header line ile ilgili daha detaylı bilg edinmek için W3.org tarafından hazırlanmış olan bu siteyi ziyaret edebilirsiniz.

Son kısım olan entity body kısmında ise, istenilen dosya gönderilir. Mesela biz bu örnekte serverdan /doc/test.html sayfasını istedik. Serverda HTTP response mesajında bizlere bu sayfanın html halini entity body kısmına koyup gönderdi. Browserımızda serverdan gelen bu http response mesajının içindeki entity body kısmını okuyup bizlere sayfayı göstermiş oldu.

Evet yazımın başında da belirttiğim gibi HTTP protokolü, web uygulamalarının kalbidir. Web browserımızda yaptığımız her hareket bu bahsetmiş olduğumuz iki adet mesaj formatı vasıtası ile gerçekleşiyor. Tüm bunlara ek olarak HTTP protokolünü bu bahsettiğimiz mesaj formatları ile birlikte inceleyip, teorik bilginizi pratiğe dökmeniz için sizlere Wireshark adlı uygulamayı kurmanızı ve kurcalamanızı öneririm. Bu son öneriden sonrada yazımı bitiriyorum. Bir sonraki yazımda görüşmek üzere.

Yazar Hakkında

Hakan İlbiz

Siber güvenlik, linux, programlama ve network gibi bilgisayar bilimlerini kapsayan alanlarda yaptığı çalışmalardan edindiği tecrübeleri, kurucusu olduğu kodputer.com adlı web sitesinde okurlarına sunan ve bundan büyük bir haz duyan Sakarya Üniversitesi Bilgisayar Mühendisliği öğrencisi.

Yorum Ekle

Yorum Yazmak İçin Tıkla