İçeriğe atla
Makale

HTTP Nedir? HTTPS Farkı, Metotlar, Durum Kodları ve HTTP/3

HTTP, tarayıcı ile web sunucusu arasındaki istek-cevap protokolüdür. Nasıl çalıştığını, metotları, durum kodlarını, HTTPS farkını ve HTTP/3'ü anlattık.

Oğuzhan Gerçek··6 dk okuma
HTTP Nedir? HTTPS Farkı, Metotlar, Durum Kodları ve HTTP/3

Kısa cevap: HTTP (Hypertext Transfer Protocol), tarayıcı ya da uygulama gibi bir istemcinin web sunucusundan bir kaynağı istemesini ve sunucunun cevap vermesini düzenleyen istek-cevap protokolüdür; web'in üzerinde çalıştığı dil budur. İstemci "GET /sayfa" gibi bir istek gönderir, sunucu "200 OK" gibi bir durum kodu, başlıklar ve içerikle cevap verir. HTTP durumsuzdur, her istek kendi başına değerlendirilir; oturumlar çerezlerle kurulur. HTTPS, aynı protokolün TLS ile şifrelenmiş hâlidir. Bugün üç sürüm bir arada kullanılıyor: metin tabanlı HTTP/1.1, ikili ve çoğullanmış HTTP/2, UDP üzerinde QUIC ile çalışan HTTP/3.

HTTP nedir?

HTTP'nin anlamını tanımlayan RFC 9110 (Haziran 2022) onu dağıtık, iş birliğine dayalı hiper metin bilgi sistemleri için durumsuz, uygulama düzeyinde bir protokol olarak tarif eder. Tarihi web'in tarihiyle aynı: MDN'nin anlatımıyla Tim Berners-Lee 1989'da CERN'de internet üzerinde bir hiper metin sistemi önerdi, 1990 sonunda HTTP dâhil dört yapı taşı tamamlandı ve 6 Ağustos 1991'deki duyuru bugün web'in kamuya açık bir proje olarak başlangıcı sayılıyor. İlk sürüm (sonradan HTTP/0.9 denildi) tek satırlık bir GET isteğinden ibaretti; başlık, durum kodu ve HTML dışında içerik yoktu.

HTTP OSI modelinin 7. katmanında, yani uygulama katmanında çalışır; altında taşıma için TCP, HTTP/3'te ise QUIC vardır. Katmanları OSI yazısında anlattık.

HTTP nasıl çalışır?

  1. Tarayıcı adresi çözer: alan adı DNS ile IP adresine çevrilir.
  2. Sunucuyla bağlantı kurulur: HTTP/1.1 ve HTTP/2'de TCP, HTTP/3'te UDP üzerinde QUIC. RFC 9110'a göre varsayılan port HTTP'de 80, HTTPS'te 443.
  3. HTTPS'te bağlantı TLS ile şifrelenir; sertifika doğrulaması burada yapılır (SSL ve TLS yazımız).
  4. İstemci isteği gönderir: metot ve hedef (GET /urunler HTTP/1.1), başlıklar (Host, User-Agent, Accept, çerezler) ve gerekiyorsa gövde (form verisi, JSON).
  5. Web sunucusu cevabı döner: durum satırı (HTTP/1.1 200 OK), başlıklar (Content-Type, Cache-Control, Set-Cookie) ve gövde (HTML, JSON, görsel).
  6. Tarayıcı sayfadaki her kaynak (betik, stil, görsel) için bu döngüyü yineler; HTTP/1.1'de kalıcı bağlantı sayesinde aynı bağlantı yeniden kullanılır, HTTP/2'de istekler tek bağlantıda paralel gider.

HTTP durumsuzdur: sunucu iki isteği birbirine kendiliğinden bağlamaz. Oturum, sepet ve giriş bilgisi çerezler (Cookie / Set-Cookie başlıkları) ya da istek başlığında taşınan belirteçlerle (token) kurulur.

HTTP metotları

RFC 9110'un tanımladığı standart metotlar GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS ve TRACE; PATCH ise RFC 5789'da tanımlı. Günlük kullanımdakiler:

  • GET: Kaynağı ister; sunucuda değişiklik yapması beklenmez. Sayfa açmak, veri okumak.
  • HEAD: GET ile aynı, ama yalnızca başlıklar döner; dosya var mı, ne zaman değişmiş diye bakmak için.
  • POST: Sunucuya veri gönderir ve işletir: form göndermek, kayıt oluşturmak.
  • PUT: Kaynağı gönderilen hâliyle bütünüyle değiştirir; PATCH yalnızca bir kısmını günceller.
  • DELETE: Kaynağı siler.
  • OPTIONS: Sunucunun o kaynak için hangi metotlara izin verdiğini sorar; tarayıcılar CORS ön kontrolünde kullanır.

RFC 9110 iki özellik tanımlar: güvenli (safe) metotlar salt okunurdur, sunucuda durum değiştirmesi beklenmez (GET, HEAD, OPTIONS, TRACE); idempotent metotlar birden çok kez yinelendiğinde tek seferle aynı sonucu verir (PUT, DELETE ve güvenli metotlar). POST ikisi de değildir; bu yüzden tarayıcı bir POST'u yinelemeden önce sorar. Web API'lerinin bu metotları nasıl kullandığını API yazısında anlattık.

HTTP durum kodları

Sunucunun üç haneli cevabı. RFC 9110 beş sınıf tanımlar:

  • 1xx bilgi: İstek alındı, işlem sürüyor (101 Switching Protocols).
  • 2xx başarı: 200 OK, 201 Created (kayıt oluşturuldu), 204 No Content (başarılı, gövde yok).
  • 3xx yönlendirme: 301 Moved Permanently (adres kalıcı olarak değişti; SEO'da eski adresler için kullanılan kod), 302 Found (geçici), 304 Not Modified (önbellekteki kopya hâlâ geçerli).
  • 4xx istemci hatası: 400 Bad Request, 401 Unauthorized (kimlik doğrulama gerekli), 403 Forbidden (yetki yok), 404 Not Found, 429 Too Many Requests (istek sınırı aşıldı).
  • 5xx sunucu hatası: 500 Internal Server Error, 502 Bad Gateway (aradaki proxy ya da yük dengeleyici arkadaki sunucudan geçersiz cevap aldı), 503 Service Unavailable (sunucu geçici olarak hizmet veremiyor), 504 Gateway Timeout.

İzleme tarafında 5xx oranı uygulamanın sağlığını, 4xx oranı istemci ve yetki sorunlarını, 3xx zinciri de gereksiz yönlendirmeleri gösterir; APM yazısında hata oranının neden altın sinyallerden biri olduğunu anlattık.

HTTP ile HTTPS arasındaki fark

HTTPS, HTTP trafiğinin TLS ile şifrelenmiş hâlidir; protokol aynıdır, taşıma şifrelidir. RFC 9110'a göre https adresinde istemci sunucuyla TLS bağlantısı kurar, sunucunun o alan adı adına hareket ettiği doğrulanır ve iletişim gizlilik ve bütünlük korumasına kavuşur. MDN'ye göre bu katman 1994 sonunda Netscape'in SSL'iyle geldi ve e-ticaret sitelerini mümkün kıldı; SSL sonradan standartlaşıp TLS oldu. Şifresiz HTTP'de adres, çerez ve form verisi yolda okunabilir ve değiştirilebilir; bu yüzden tarayıcılar düz HTTP sayfalarını "güvenli değil" olarak işaretliyor. Sertifika, sürümler ve yenileme SSL yazısında.

Sürümler: HTTP/1.1, HTTP/2 ve HTTP/3

MDN'nin zaman çizelgesine göre:

  • HTTP/1.0 (RFC 1945, Kasım 1996): Sürüm bilgisi, durum kodları, başlıklar ve Content-Type eklendi.
  • HTTP/1.1 (1997): İlk standart sürüm. Kalıcı bağlantı (aynı bağlantı yeniden kullanılır), Host başlığı (aynı IP'de birden çok alan adı barındırma), parçalı cevap ve önbellek denetimi. 1999 (RFC 2616) ve 2014 (RFC 7230-7235) sürümleriyle güncellendi; bir bağlantıda istekler sırayla gittiği için tarayıcılar siteye altıya kadar bağlantı açıyordu.
  • HTTP/2 (Mayıs 2015): Google'ın deneysel SPDY protokolüne dayanır. Metin değil ikili protokol, aynı bağlantıda paralel istekler (çoğullama) ve başlık sıkıştırması. W3Techs verisine göre kullanımı Ocak 2022'de bütün sitelerin yüzde 46,9'uyla zirve yaptı.
  • HTTP/3 (RFC 9114): Anlamı aynı, taşıma farklı: TCP yerine UDP üzerinde çalışan QUIC. QUIC her akış için paket kaybı tespitini ve yeniden gönderimi ayrı yürüttüğü için bir akıştaki kayıp diğerlerini bekletmez. W3Techs'e göre Ekim 2022'de sitelerin yüzde 26'sı HTTP/3 kullanıyordu.
  • 2022: HTTP baştan sona gözden geçirilip RFC 9110 (anlam), 9111 (önbellek), 9112 (HTTP/1.1), 9113 (HTTP/2) ve 9114 (HTTP/3) olarak yayımlandı ve İnternet Standardı (STD 97) statüsü aldı.

Kurumsal tarafta

İnternete açık uygulamalarda HTTP'nin önünde üç katman durur: içeriği dağıtan CDN, isteği sunuculara dağıtan yük dengeleyici ve HTTP trafiğini filtreleyen WAF. Bu katmanların tasarımı ve işletimi uygulama güvenliği (WAF) ile application runtime ve middleware operasyonları hizmetlerimizin konusu.

Sık sorulan sorular

HTTP ne demek? Hypertext Transfer Protocol, hiper metin aktarım protokolü: tarayıcının web sunucusundan sayfa ve veri istemesini, sunucunun cevap vermesini düzenleyen kurallar bütünü.

HTTP ile HTTPS arasındaki fark nedir? HTTPS, aynı HTTP trafiğinin TLS ile şifrelenmesi; sunucunun kimliği sertifikayla doğrulanır, veri yolda okunamaz ve değiştirilemez. Düz HTTP'de bunların hiçbiri yoktur.

404 ne demek? İstenen kaynak sunucuda bulunamadı: adres yanlış ya da sayfa kaldırılmış. Kalıcı taşınan sayfalar için doğrusu 301 yönlendirmesidir.

HTTP 500 hatası ne demek? Sunucu tarafında beklenmeyen bir hata: uygulama çöktü, yapılandırma bozuk ya da arkadaki veri tabanı cevap vermiyor. 502 ve 504 ise aradaki proxy ya da yük dengeleyicinin arkadaki sunucuya ulaşamadığını gösterir.

HTTP/2 ile HTTP/3 arasındaki fark nedir? İkisi de aynı istek-cevap anlamını taşır. HTTP/2 TCP üzerinde ikili ve çoğullanmış çalışır; HTTP/3 TCP yerine UDP üzerindeki QUIC'i kullanır, böylece bir akıştaki paket kaybı diğer akışları bekletmez.

HTTP durumsuz ne demek? Sunucunun her isteği öncekilerden bağımsız değerlendirmesi. Giriş yapmış kullanıcıyı tanımak için oturum bilgisi çerezle ya da belirteçle her istekte yeniden gönderilir.

Kaynaklar