HTTP Protokolü ve İncelikleri

Çağlar GÜL
Çağlar GÜL | Blog
4 min readSep 23, 2020

HTTP (The Hypertext Transfer Protocol), World Wide Web’in temelidir ve hypertext bağlantılarını kullanarak web sayfalarını yüklemek için kullanılır.

HTTP protokolü client-server mimarisinde çalışır. Client tarafından request (istek) gönderilir ve server tarafından response (cevap) alınır.

HTTP, ağa bağlı cihazlar arasında bilgi aktarmak için tasarlanmış bir uygulama katmanı protokolüdür ve bir alt katmanda TCP üzerine kurulmuştur. Bu sebeple HTTP haberleşmeleri sırasında gerçekleşebilecek veri kaybı, veya kaybedilen verinin tekrar gönderimi veya doğru sıraya konması gibi konularla TCP ilgilenir.

HTTP isteğinde neler var?

HTTP isteği, web tarayıcıları gibi internet iletişim platformlarının bir web sitesini yüklemek için ihtiyaç duydukları bilgileri isteme şeklidir.

İnternet üzerinden yapılan her HTTP isteği, farklı bilgi türlerini taşıyan bir dizi kodlanmış veri taşır. Tipik bir HTTP isteği şunları içerir:

  1. HTTP version type (Protokol versiyonu)
  2. URL
  3. HTTP method
  4. HTTP request headers (istek başlıkları)
  5. Optional HTTP body (istek içeriği)

HTTP yöntemi (method) nedir?

HTTP isteğinin sorgulanan sunucudan beklediği eylemi belirtir.

HTTP 1.1 versiyonu (RFC 2616) ile tanımlanan ve diğer eklentilerle gelen başlıca HTTP metodları şunlardır:

  • GET: Bu metod sunucudan veri almak için kullanılır. GET ve POST metodları en sık kullanılan metodlar olup sunucudaki kaynaklara erişmek için kullanılırlar. GET metodu ile sorgu metinleri URL içinde gönderilebilir. Bunun en önemli faydası kullanıcıların bookmark edebilmeleri ve aynı sorguyu içeren istekleri daha sonra gönderebilmelerini sağlaması ve tarayıcıda önceki sorguların “geri” tuşu ile veya tarayıcı geçmişinden çağrılarak aynı sayfalara ulaşabilmeleridir. Güvenlik açısından URL’lerin ekranda görüntüleniyor olması ve URL’in hedefine ulaşıncaya kadar ve hedef sunucu üzerinde iz kayıtlarında görülebilmesi gönderilen parametrelerin gizlilik ihtiyacı varsa sıkıntı yaratabilir. Bu nedenlerle hassas isteklerin GET ile gönderilmemelidir.
  • POST: Bu metod ile sunucuya veri yazdırabilirsiniz. Bu metodla istek parametreleri hem URL içinde hem de mesaj gövdesinde gönderilebilir. Sadece mesaj gövdesinin kullanımı yukarıda sayılan riskleri engelleyecektir. Tarayıcılar geri butonuna basıldığında POST isteğinin mesaj gövdesinde yer alan parametreleri tekrar göndermek isteyip istemedimizi sorarlar. Bunun temel nedeni bir işlemi yanlışlıkla birden fazla yapmayı engellemektir. Bu özellik ve de güvenlik gerekçeleriyle bir işlem gerçekleştirileceğinde POST metodunun kullanılması önerilir.
  • PUT: Bu metod ile servis sağlayıcı üzerindeki bir kaynağı güncelleyebilirsiniz. Hangi kaynağı güncelleyecekseniz o kaynağın id’sini göndermek zorunludur.
  • HEAD: GET metoduyla benzer işleve sahiptir ancak geri dönen yanıtta mesaj gövdesi bulunmaz (yani başlıklar ve içerikleri GET metoduyla aynıdır). Bu nedenle GET mesajı gönderilmeden önce bir kaynağın var olup olmadığını kontrol etmek için kullanılabilir.
  • DELETE: Bu metod ile sunucudaki herhangi bir veriyi silebilirsiniz.
  • CONNECT: Bir proxy sunucu üzerinden başka bir sunucuya bağlanmak ve proxy sunucuyu bir tünel gibi kullanmak için kullanılır.
  • OPTIONS: Bu metod belli bir kaynak için kullanılabilecek HTTP metodlarını sunucudan sorgulamak için kullanılır.
  • TRACE: Teşhis amaçlı kullanılan bir metoddur. Sunucu bu metodla gelen istek mesajının içeriğini aynen yanıt gövdesinde geri göndermelidir. Bu yöntemle sunucu ile istemci arasında bir vekil sunucu varsa bu sunucunun ve yaptığı değişikliklerin tespiti mümkün olabilir.
  • PATCH: Bu metod bir kaynağa istediğiniz küçük çaplı değişimi yapmanızı sağlar.
  • SEARCH: Bir dizinin altındaki kaynakları sorgulamak için kullanılır.

HTTP istek başlığı (request header) nelerdir?

HTTP üstbilgileri, anahtar-değer çiftlerinde depolanan metin bilgilerini içerir ve her HTTP isteğine (ve yanıta, bundan sonra daha fazlası) dahil edilir. Bu başlıklar, istemcinin hangi verilerin istendiği gibi temel bilgileri iletir.

Bir HTTP isteğinin gövdesi, bir kullanıcı adı ve şifre gibi web sunucusuna gönderilen herhangi bir bilgiyi veya bir forma girilen diğer verileri içerir.

HTTP yanıtında neler var?

HTTP yanıtı, web istemcilerinin (genellikle tarayıcıların) bir HTTP isteğine yanıt olarak bir İnternet sunucusundan aldığı şeydir.

Tipik bir HTTP yanıtı şunları içerir:

  1. HTTP status code
  2. HTTP response headers
  3. optional HTTP body

HTTP durum kodu nedir?

HTTP durum kodları, genellikle bir HTTP isteğinin başarıyla tamamlanıp tamamlanmadığını göstermek için kullanılan 3 basamaklı kodlardır. Durum kodları aşağıdaki 5 bloğa bölünmüştür:

  1. 1xx Informational
  2. 2xx Success
  3. 3xx Redirection
  4. 4xx Client Error
  5. 5xx Server Error

“Xx” 00 ile 99 arasındaki farklı sayıları ifade eder. ‘2’ ile başlayan durum kodları bir başarıyı gösterir.

Örneğin, bir müşteri bir web sayfası talep ettikten sonra, en sık görülen yanıtlar, isteğin düzgün bir şekilde tamamlandığını gösteren “200 OK” durum koduna sahiptir.

Yanıt “4” veya “5” ile başlıyorsa bu, bir hata olduğu ve web sayfasının görüntülenmeyeceği anlamına gelir. “4” ile başlayan bir durum kodu, istemci tarafında bir hata olduğunu gösterir (Bir URL’de yazım hatası yaparken “404 BULUNAMADI” durum koduyla karşılaşmak çok yaygındır).

“5” ile başlayan bir durum kodu, sunucu tarafında bir şeylerin ters gittiği anlamına gelir.

Durum kodları ayrıca, sırasıyla bilgi amaçlı bir yanıtı ve yönlendirmeyi gösteren “1” veya “3” ile başlayabilir.

HTTP yanıt başlıkları nelerdir?

HTTP isteğine çok benzer şekilde, bir HTTP yanıtı, yanıt gövdesinde gönderilen verilerin dili ve biçimi gibi önemli bilgileri aktaran başlıklarla birlikte gelir.

HTTP yanıt gövdesinde neler var?

“GET” isteklerine verilen başarılı HTTP yanıtları, genellikle istenen bilgileri içeren bir gövdeye sahiptir. Çoğu web talebinde bu, bir web tarayıcısının web sayfasına çevireceği HTML verileridir.

HTTP is a stateless protocol.

HTTP, durum bilgisi olmayan (stateless veya kalıcı olmayan) bir protokoldür. Her istek kendi başına ele alınır. Bir talep, önceki taleplerde ne yapıldığını bilmeyecektir. Protokol, basitlik açısından stateless olacak şekilde tasarlanmıştır. Ancak, e-ticaret alışveriş sepeti gibi bazı İnternet uygulamaları, durum bilgilerinin bir istekte diğerine iletilmesini gerektirir. Protokol stateless olduğu için, başvurularında durum bilgilerini muhafaza etmek uygulamanın sorumluluğundadır.

Birden çok HTTP isteğinde durum bilgisini korumak için birkaç teknik kullanılabilir;

  1. Hidden form field (durum yanıtın bir parçası olarak istemciye gönderilir ve formun gizli verilerinin bir parçası olarak sunucuya geri döndürülür.)
  2. Cookie (http başlıklarında durum bilgisi taşınır.)
  3. URL-Rewriting (durum bilgisi url nin parçası olarak gönderilir.)

HTTP Durum Bilgisinin Yönetimi ile ilgili daha detaylı bilgiye aşağıdaki linkten ulaşabilirsiniz.

https://www.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_StateManagement.html

--

--

Çağlar GÜL
Çağlar GÜL | Blog

elektrik-elektonik mühendisi | yazılıma ve tasarıma meraklı | araştırmayı ve paylaşmayı seven | blogger ve oyun sevdalısı