World Wide Web’in temelindeki protokol olan Hypertext Transfer Protocol – Hiper Metin Transferi Protokolü (HTTP), sunucuların ve tarayıcıların birbirleriyle iletişim kurma şeklidir. 

Tim Berners-Lee ve ekibi tarafından 1989-1991 arasında geliştirilen HTTP, istemci-sunucu bilgi işlem modelinde bir istek-yanıt protokolü olarak işlev görür. HTTP standartları, Internet Engineering Task Force (IETF) ve World Wide Web Consortium (W3C) tarafından geliştirilmiştir ve bir RFC (Requests for Comments) yayınlanmasıyla sonuçlanmıştır.

HTTP’nin sürümleriHTTP / 0.9, HTTP / 1.0, HTTP / 1.1 HTTP / 2.0 ve HTTP / 3.0’dır. En yaygın olarak kullanılan sürüm HTTP / 1.1’dir. Gelecekte HTTP / 2.0 daha yaygın kullanılacaktır

HTTP, bilgisayarlar için harika bir dildir, ancak şifreli değildir. Bu nedenle bir bilgisayar korsanı içeri girmeyi başarırsa, tarayıcıda olan her şeyi okuyabilir (Facebook kullanıcı adı ve az önce yazdığınız şifre dahil).

Temel olarak HTTP, World Wide Web’de veri (HTML dosyaları, görüntü dosyaları, sorgu sonuçları, vb.) sunmak için kullanılan TCP / IP tabanlı bir iletişim protokolüdür. Varsayılan bağlantı noktası TCP 80 portudur, ancak diğer bağlantı noktalarını da kullanılabilir. Bilgisayarların birbirleriyle iletişim kurması için standart bir yol sağlar. HTTP belirtimi, istemcilerin istek verilerinin nasıl oluşturulacağını ve sunucuya nasıl gönderileceğini ve sunucuların bu isteklere nasıl yanıt vereceğini belirtir.

HTTP Oturumu

HTTP, “durumsuz” bir protokoldür. Bu, birbiriyle ilişkili istekleri takip etmek için “yerleşik” bir standart olmadığı anlamına gelir. Her istek bağımsız olarak değerlendirilir. Şu anda, web uygulamalarının çoğu 1996’da piyasaya sürülen HTTP 1.1‘i kullanır. Bu web uygulamaları çok gelişmiştir ve genellikle tamamlanması birden fazla istek / yanıt gerektiren karmaşık işlemleri gerçekleştirir. Bu uygulamalar ayrıca her kullanıcıya özel içerik sunar. Bu, bir kullanıcının birden çok istekte tanımlanmasını gerektirir. 

HTTP, istemci-sunucu mimarisini  ve iletim protokolü olarak TCP kullanır. Birden çok istek tek bir TCP bağlantısı üzerinden gönderilebilir, ancak bunlar aynı zamanda hem istemci hem de sunucu tarafından bağımsız olarak kabul edilir.

HTTP Kimlik Doğrulama

HTTP kimlik doğrulama, bir sunucunun bir istemciden kimlik doğrulama bilgilerini (bir kullanıcı kimliği ve parola) talep edebildiği basit bir sınama ve yanıt mekanizmasıdır. 

HTTP, sayfalara ve diğer kaynaklara erişimi kontrol etmek için çeşitli kimlik doğrulama mekanizmalarının kullanılmasını destekler. Bu mekanizmaların tümü, 401 durum kodu ve WWW-Authenticate yanıt başlığının kullanımına dayanmaktadır.

En yaygın kullanılan HTTP kimlik doğrulama mekanizmaları aşağıdaki gibidir:

1. Temel

İstemci, kullanıcı adını ve parolayı şifrelenmemiş base64 kodlu metin olarak gönderir. Parola kolayca yakalanıp HTTP üzerinden yeniden kullanılabileceği için yalnızca HTTPS ile kullanılmalıdır.

2. Digest

İstemci, sunucuya şifrenin karma bir formunu gönderir. Şifre HTTP üzerinden yakalanamasa da, karma şifre kullanılarak istekleri yeniden oynatmak mümkün olabilir.

3. NTLM

HTTP üzerinden şifre yakalama veya yeniden oynatma saldırılarını önleyen güvenli bir sınama / yanıt mekanizması kullanır. Ancak kimlik doğrulama, bağlantı başına yapılır ve yalnızca HTTP / 1.1 kalıcı bağlantılarla çalışır. Bu nedenle, tüm HTTP proxy’lerinde çalışmayabilir ve bağlantılar web sunucusu tarafından düzenli olarak kapatılırsa çok sayıda ağ gidiş-dönüşü sağlayabilir.

HTTP Mesaj Biçimi

HTTP mesajı, istemci ve sunucu arasında verilerin nasıl değiş tokuş edildiğini göstermek için kullanılır. İstemci-sunucu mimarisine dayanmaktadır. HTTP istemcisi, bir veya daha fazla HTTP istek mesajı göndermek için bir sunucuya bağlantı kuran bir programdır. HTTP sunucusu, HTTP yanıt mesajları göndererek HTTP isteklerine hizmet etmek için bağlantıları kabul eden bir programdır.

HTTP mesajı, bir ilk istek satırı ve bir ilk yanıt satırından oluşur.

HTTP Mesajları aşağıdaki şekilde sınıflandırılabilir:

1. İlk İstek Satırı

İlk satır, istek ve yanıt için farklıdır. Bir istek satırı üç bölümden oluşur: Yöntem adı, istenen kaynağın yerel yolu ve kullanılan HTTP sürümü. Tüm bu parçalar boşluklarla ayrılmıştır.

Sözdizimi:

GET /path/to/file/index.html HTTP / 1.0

  • GET, en yaygın HTTP yöntemidir.
  • Path, ana bilgisayar adından sonra URL’nin bir kısmını gösterir. Aynı zamanda istek URL’si olarak da adlandırılır.
  • HTTP sürümü her zaman büyük harfle “HTTP / x.x” biçimini alır.

2. İlk Yanıt Satırı

İlk yanıt satırı, durum satırı olarak da bilinir. Üç bölümden oluşur: HTTP sürümü, isteğin sonucunu veren bir yanıt durum kodu ve durum kodunu açıklayan İngilizce neden ifadesi.

Örnek:

HTTP/1.0 200 OK  ya da  HTTP/1.0 404 Not Found  

Burada, yanıt satırının ve istek satırının HTTP sürümü “HTTP / x.x” ile aynıdır.

Mesaj Başlıkları

Mesaj başlığı, istek ve yanıt hakkında bilgi sağlar. Ayrıca mesaj gövdesinde gönderilen nesne hakkında da bilgi verir. 

Mesaj başlıkları dörde ayrılır:

Genel Başlık: Hem istek mesajları hem de yanıt mesajları için genel uygulanabilirliğe sahiptir.

İstek Başlığı: Yalnızca istek mesajları için uygulanabilirliği vardır.

Yanıt Başlığı: Yalnızca yanıt mesajları için uygulanabilirliği vardır.

Varlık Başlığı: Varlık gövdesi ve istekle tanımlanan kaynak hakkındaki meta bilgileri tanımlar.

Yukarıdaki tüm başlıklar aynı genel biçimi izler. Başlık alanlarının her biri, bir adın ardından iki nokta üst üste işaretinden ve aşağıdaki alan değerlerinden oluşur:

message-header = field-name “:” [ field-value ]  

Mesaj Gövdesi

Bir HTTP mesajının mesaj gövdesi, istek ve yanıtla ilişkili tüm gövdeyi taşımak için kullanılır. Mesaj gövdesi, Transfer-Encoding başlık alanı ile belirtildiği gibi, sadece bir transfer-kodlama uygulandığında tüm gövdeden farklıdır.

Sözdizimi

message-body = entity-body  

        | <entity-body encoded as per Transfer-Encoding>  

Transfer-Encoding, mesajın güvenli ve düzgün bir şekilde aktarılmasını sağlamak için bir uygulama tarafından uygulanan herhangi bir transfer kodlamasını belirtmek için kullanılmalıdır.

Genel Başlık Alanları

Bazı başlık alanları hem istek hem de yanıt mesajları için uygulanabilirliğe sahiptir. Bu başlık alanları yalnızca mesaj iletildiğinde geçerlidir.

Sözdizimi

general-header = Cache-Control   

HTTP Durum Kodları

HTTP durum kodları, bir istemcinin isteğine yanıt olarak bir sunucu tarafından verilir. Belirli bir HTTP isteğinin başarıyla tamamlanıp tamamlanmadığını gösterir ve sorunun nedenini belirlemeye yardımcı olur. Yanıtlar beş sınıfa ayrılır:

1. Bilgilendirme yanıtları (100-199)

İsteğin alındığını ve anlaşıldığını belirten bir yanıttır.

2. Başarı Yanıtları (200-299)

İsteğin alındığını, anlaşıldığını ve kabul edildiğini belirten bir yanıttır.

3. Yönlendirmeler (300-399)

İstemcinin isteği tamamlamak için ek işlem yapması gerektiğini belirten bir yanıttır.

4. İstemci Hataları (400-499)

Hata istemciden kaynaklanmıştır. “404: Not Found” yaygın bir durum kodudur. Bu, sunucunun istenen kaynağı bulamadığı anlamına gelir. Bir tarayıcıda, URL’nin tanınmadığı anlamına gelir.

5. Sunucu Hataları (500-599)

Sunucu isteğinin yerine getiremediği durumlarda oluşur.

İlk hane yanıtın sınıfını gösterir. Son iki hane, sınıflandırma açısından hiçbir şey ifade etmez. Durum kodu, bir sunucu ve bir istemci arasında verilerin nasıl değiştirildiğini gösteren bir HTTP mesajı içinde bulunabilir. HTTP mesajları, ASCII’de kodlanmış metin bilgilerinden oluşur ve birden çok satıra yayılır. 

Şifrelenmiş Bağlantı

Şifreli bir HTTP bağlantısı kurmanın en popüler yolu HTTPS‘dir. HTTPS (Güvenli Köprü Metni Aktarım Protokolü) iki protokolün, HTTP (Köprü Metni Aktarım Protokolü) ve SSL / TLS’nin birleşimidir. HTTP, 80 numaralı bağlantı noktasını kullanırken, HTTPS, 443 numaralı bağlantı noktasını kullanır. 443 numaralı bağlantı noktası, şifreli bir bağlantı üzerinden güvenli veri aktarımı sağlayan bir şifreleme algoritmasına sahiptir. HTTPS’nin sonundaki “S”, “Güvenli” anlamına gelir.

HTTP’nin Dezavantajları Nelerdir?

1. Veri Bütünlüğü

HTTP’de kullanılan herhangi bir şifreleme yöntemi olmadığından, birinin içeriği değiştirme şansı vardır. HTTP’nin güvenli olmayan bir yöntem olarak görülmesinin nedeni budur.

2. Veri Gizliliği

Gizlilik, HTTP bağlantısında karşılaşılan başka bir sorundur. Herhangi bir bilgisayar korsanı isteği durdurmayı başarırsa, web sayfasında bulunan tüm içeriği görüntüleyebilir. Bunun yanı sıra kullanıcı adı ve şifre gibi gizli bilgileri de toplayabilir.

3. Sunucu Kullanılabilirliği

HTTP, ihtiyaç duyduğu tüm verileri alsa bile, istemciler bağlantıyı kapatmak için önlem almaz. Bu nedenle, bu süre boyunca sunucu mevcut olmayacaktır.

4. İdari Ek Yük

Bir web sayfasını iletmek için, HTTP’nin birden çok bağlantı oluşturması gerekir. Bu, bağlantıda idari ek yüke neden olur.

5. IoT Cihaz Desteği

HTTP, daha fazla güç tüketimine yol açan daha fazla sayıda sistem kaynağı kullanır. IoT cihazlar kablosuz sensör ağları içerdiği için HTTP kullanmaları uygun değildir.

Yukarıda sizin için  HTTP ile ilgili birçok sorunun cevabını paylaşmaya çalıştık. HTTP ile ilgili merak ettikleriniz varsa, yorum bölümünde bize yazın, içeriğimizi geliştirmek için deneyimlerinizi ve önerilerinizi paylaşmayı unutmayın.