HTTP (Hypertext Transfer Protocol), web üzerindeki bilgi akışını sağlayan temel iletişim protokolüdür. Web tarayıcıları ve sunucular arasında veri alışverişini yönetmek için kullanılır. İnternetin temel yapı taşlarından biri olan HTTP, kullanıcıların bir web sayfasını ziyaret etmek için tarayıcıya bir URL girmesiyle başlar. Tarayıcı, sunucudan belirli bir web sayfasını talep eder ve sunucu da bu talebe uygun olarak yanıt verir. Bu süreç, genellikle web üzerindeki her türlü veri alışverişi için kullanılan en yaygın yöntemlerden biridir.
HTTP Tarihçesi ve Gelişimi
HTTP, 1989 yılında Tim Berners-Lee tarafından CERN’de (Avrupa Nükleer Araştırma Merkezi) geliştirilen World Wide Web’in (WWW) temel protokolüdür. İlk versiyonu, HTTP/0.9, oldukça basitti ve yalnızca bir metin tabanlı veri transferine olanak sağlıyordu. Zamanla, web’in ihtiyaçları arttıkça protokolde de güncellemeler yapıldı.
- HTTP/0.9 (1991): Bu ilk sürüm oldukça basit bir veri transferine izin veriyordu ve yalnızca tek bir tür veri (HTML) destekleniyordu. Başlıklar, hata kodları veya diğer metadata bilgiler yoktu.
- HTTP/1.0 (1996): HTTP’nin bu sürümü, başlık bilgilerini ve hata kodlarını tanıttı. Artık yalnızca HTML değil, diğer dosya türleri de (resim, video vb.) destekleniyordu.
- HTTP/1.1 (1997): Bu sürüm, performansı artırmaya yönelik pek çok yenilik getirdi. Persistent Connections (Kalıcı Bağlantılar) ve pipelining (peş peşe gelen isteklerin bir sırada yapılması) gibi özellikler bu sürümde tanıtıldı.
- HTTP/2 (2015): Hız ve verimlilik için büyük bir güncelleme oldu. Bu sürüm, daha az gecikme ile çoklu isteklerin aynı anda yapılmasına olanak tanıdı.
- HTTP/3 (2020): HTTP/2’ye kıyasla daha fazla hız ve güvenlik sunar. QUIC protokolü üzerine inşa edilmiş olan bu sürüm, bağlantı sürelerini ve veri transfer performansını artırır.
HTTP Nasıl Çalışır?
HTTP, istemci (client) ve sunucu (server) arasındaki iletişimde bir istek (request) ve yanıt (response) döngüsü üzerine kurulu bir protokoldür. Tarayıcı, bir kullanıcı tarafından bir web sayfası ziyaret edildiğinde, sunucuya bir istek gönderir ve sunucu da istenen bilgiyi tarayıcıya geri gönderir.
Bu süreç şu aşamalardan oluşur:
- URL Girilmesi: Kullanıcı tarayıcıya bir URL girer.
- DNS Sorgulaması: Tarayıcı, URL’deki alan adının IP adresini öğrenmek için DNS sunucusuna bir sorgu gönderir.
- HTTP İsteği: Tarayıcı, bu IP adresine bir HTTP isteği gönderir. Bu istek, istenen sayfanın hangi yöntemle çağrılacağını belirler.
- HTTP Yanıtı: Sunucu, tarayıcıya istenen sayfanın içeriğiyle birlikte bir HTTP yanıtı gönderir.
- Sayfanın Görüntülenmesi: Tarayıcı, sunucudan gelen içeriği işler ve sayfayı görüntüler.
HTTP İstek ve Yanıt Yapısı
HTTP, iki temel bileşenden oluşur: İstek (Request) ve Yanıt (Response). Her biri başlık (header) ve içerik (body) bölümlerinden oluşur.
Bölüm | Açıklama |
---|---|
Başlık (Header) | HTTP istek ve yanıtının meta verilerini içerir. İstek başlıkları, tarayıcıdan gelen bilgiler içerirken, yanıt başlıkları sunucunun döndürdüğü durumu belirtir. |
İçerik (Body) | İsteğin veya yanıtın asıl verisini içerir. Bu, bir HTML sayfası, JSON verisi, resim veya başka herhangi bir veri olabilir. |
Bir HTTP isteği şu şekilde başlar:
GET /index.html HTTP/1.1
Host: www.ornek.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Accept: text/html
Yukarıdaki örnek, bir tarayıcının www.ornek.com sunucusundan bir HTML sayfasını talep ettiğini gösteren basit bir HTTP isteğidir. İsteğin “GET” metodu kullanıldığını, sunucunun hangi kaynağı (“/index.html”) sunmasını talep ettiğini ve HTTP sürümünün 1.1 olduğunu belirtir.
HTTP yanıtı ise şöyle olabilir:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 2345
<!DOCTYPE html>
<html>
<head>
<title>Ornek Sayfa</title>
</head>
<body>
<h1>Ornek Web Sayfası</h1>
<p>Bu bir örnek web sayfasıdır.</p>
</body>
</html>
Bu örnekte, sunucu bir HTML sayfasını tarayıcıya döndürüyor. Başlık bölümünde, yanıtın başarılı olduğunu belirten “200 OK” durumu, içerik türü ve uzunluğu gibi bilgiler yer alır.
HTTP Yöntemleri
HTTP, çeşitli yöntemler (methods) kullanarak sunuculara ne tür bir işlem yapılacağını bildirir. En yaygın kullanılan HTTP yöntemleri şunlardır:
Yöntem | Açıklama |
---|---|
GET | Sunucudan bir kaynağı (örneğin bir web sayfasını) talep eder. Verileri almak için kullanılır. |
POST | Sunucuya veri göndermek için kullanılır. Genellikle form verilerini sunucuya göndermek için kullanılır. |
PUT | Sunucuya bir kaynağı güncellemek için veri gönderir. |
DELETE | Sunucudaki bir kaynağı silmek için kullanılır. |
HEAD | Sunucudan sadece başlık (header) bilgilerini alır. İçerik alınmaz. Bu yöntem, bir kaynağın var olup olmadığını kontrol etmek için kullanılır. |
OPTIONS | Sunucunun desteklediği HTTP yöntemlerini öğrenmek için kullanılır. |
HTTP Durum Kodları
Bir HTTP isteğine yanıt veren sunucu, bir durum kodu (status code) ile bu isteğin başarılı olup olmadığını bildirir. Bu durum kodları, tarayıcının isteği nasıl işleyeceğini veya ne tür bir sorunla karşılaştığını anlamasına yardımcı olur. Durum kodları 5 ana gruba ayrılır:
Durum Kodu Aralığı | Anlamı | Örnek Durum Kodu | Açıklama |
---|---|---|---|
1xx (Bilgilendirme) | İsteğin alındığını ancak işlemde olduğunu gösterir. | 100 Continue | İstek başarılı bir şekilde alındı, işleme devam ediliyor. |
2xx (Başarılı) | İsteğin başarıyla tamamlandığını belirtir. | 200 OK | İstek başarıyla tamamlandı ve içerik tarayıcıya gönderildi. |
3xx (Yönlendirme) | İsteğin başka bir kaynağa yönlendirildiğini gösterir. | 301 Moved Permanently | Kaynak kalıcı olarak yeni bir URL’ye taşındı. |
4xx (İstemci Hatası) | İstemcinin yaptığı bir hata nedeniyle isteğin işlenemediğini belirtir. | 404 Not Found | İstenen kaynak bulunamadı. |
5xx (Sunucu Hatası) | Sunucunun bir hata nedeniyle isteği işleyemediğini gösterir. | 500 Internal Server Error | Sunucu, isteği işlerken bir hata ile karşılaştı. |
HTTP ve HTTPS
HTTP’nin güvenli olmayan bir protokol olduğunu belirtmek gerekir. Web üzerindeki veri transferi sırasında herhangi bir şifreleme kullanılmaz. Bu nedenle, kullanıcılar ve sunucular arasında paylaşılan hassas bilgiler, kötü niyetli kişiler tarafından ele geçirilebilir.
Bu sorunu çözmek için HTTPS (Hypertext Transfer Protocol Secure) geliştirilmiştir. HTTPS, HTTP’nin güvenli bir sürümüdür ve veri transferi sırasında bilgilerin şifrelenmesini sağlar. Bu şifreleme, SSL/TLS protokolleri kullanılarak gerçekleştirilir.
- HTTP: Veriler şifrelenmeden gönderilir, bu da saldırılara açık hale getirir.
- HTTPS: Veriler SSL/TLS ile şifrelenir, bu da güvenli bir veri transferi sağlar.
HTTP’nin Avantajları ve Dezavantajları
Avantajlar | Dezavantajlar |
---|---|
Kolay Kullanım: Basit bir iletişim protokolüdür ve her tür cihazda çalışabilir. | Güvenlik Zayıflığı: Veriler şifrelenmez, bu da güvenlik açıklarına neden olur. |
Yaygın Destek: Tüm tarayıcılar ve sunucular HTTP’yi destekler. | Performans Sorunları: HTTP/1.x sürümlerinde performans sorunları yaşanabilir. |
Esneklik: GET, POST gibi birçok farklı yöntemle veri transferine olanak sağlar. | Veri Sızıntısı Riski: Kötü niyetli saldırganlar HTTP ile aktarılan verilere erişebilir. |
HTTP, internetin yapı taşlarından biri olan temel bir protokoldür. Web tarayıcıları ve sunucular arasındaki veri alışverişini sağlar ve kullanıcıların internet üzerinden bilgiye ulaşmasını mümkün kılar. Ancak güvenlik riskleri nedeniyle, özellikle hassas bilgilerin aktarımında HTTP yerine HTTPS kullanılmalıdır.