HTTP Protokolü ve İncelikleri

Çağlar GÜL
Sep 23 · 4 min read

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.
Image for post
Image for post
  • 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.

Image for post
Image for post

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.

Image for post
Image for post

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 | Blog

Tecrübelerimi not aldığım bloğum 📄📌

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store