HTTP Nedir? Nasıl Çalışır?
HTTP (The Hypertext Transfer Protocol), bilgisayarlar ve ağ sistemleri arasında gerçekleşen iletişimde kullanılan uygulama katmanı protokolüdür.
HTTP temelde World Wide Web (www) için istemci — server veri iletişiminin temelini (protokolünü, kurallarını) oluşturarak, web sayfalarında yer alan hiper metin bağlantılarını (hypertext links) kullanarak web sayfalarını yüklemek için kullanılır.
Tipik bir HTTP akışı, bir sunucuya istekte bulunan istemci (genellikle web tarayıcı) ve ardından bir yanıt mesajı döndüren sunucuyu (server) içerir.
HTTP akışı içerisinde sunucu ve istemci birbirine gönderdikleri istek mesajları, yanıtlar üzerinden iletişim sağlar.
- İstemci tarafından bir kaynağı almak için gönderilen mesajlar istek (request) ve sunucu tarafından gönderilen isteğe döndürülen cevaplar yanıt (response) olarak adlandırılır.
Temel HTTP Bileşenleri Nelerdir?
HTTP akışı içerisinde istemci server iletişimi gerçekleşirken bu akışta görev alan, akışı oluşturan çeşitli temel bileşenler mevcuttur. Bunlar:
- user-agent (istemci aracısı)
- proxy (vekil sunucular)
- web serverlardır (sunucular)
İstemciden web serverlara (sunuculara) iletilen istekler user-agent (istemci aracısından) yada istemci aracısı ile sunucu arasında bir vekil ikincil sunucu görevi gören proxyler üzerinden iletilir.
Tipik istemci aracısı genellikle web browserlar yani kullanıcıların internet tarayıcılarıdır ancak bir web servera istek yalnızca reel kullanıcı user-agentlarından iletilmez. Web de tarama gerçekleştiren bot (örümcekler) yada çeşitli istek gönderebilen uygulamalarda user-agent olarak istek oluşturabilir.
İstemciden gönderilen istekler (reel kullanıcı user-agent’ı olup olmaması fark etmeksizin) ilgili serverlara iletilir ve yetkili serverlar istekler ile alakalı yanıtlar döndürür. İstemci tarafından gönderilen istek, kaynakların barındırıldığı sunucudan önce vekil görevi gören başka bir proxy sunucusuna oradan da ana sunucuya iletilebilir. Bu tarz bir senaryoda ana sunucudan dönen yanıtlarda istemciye gitmeden önce proxy yani vekil sunucuya gider.
- Proxy sunucusuna örnek olarak cloudflare proxy serverlar örnek verilebilir.
Proxy serverlar ana sunucuların güvenlik amacıyla gizlenmesi, istek ve yanıtların cachelenerek istemci — server iletişiminin hızlanması gibi süreçlerde görev alırlar.
– İstemci (User-Agent)
- User-agent (Kullanıcı aracısı), kullanıcı adına hareket eden herhangi bir uygulama, aracıya verilen isimdir. Bu rol genellikle web tarayıcıları (browserlar) tarafından gerçekleştirilir, ancak çeşitli istek gönderebilen uygulamalarda user-agent olarak istek oluşturarak istemci olabilirler.
- HTTP akışı içerisinde gerçekleşen istemci server iletişiminde istemci tarafında user-agent rolünü genellikle tarayıcılar üstlenir ve istemci adına bir web sayfasına ulaşmak amacıyla servera yada serverın vekil sunucusu görevi gören proxy servera istek gönderir.
- İstek proxy sunucu tarafından alınmış ise isteğin gönderildiği web sayfası ile alakalı bilgilere erişilmek üzere alınan istek ana sunucuya gönderilebilir yada istek gönderilen kaynağa ilişkin bir önbellek (cache) proxy sunucusunda mevcut ise önbelleğin güncelliği kontrol edilip yanıt döndürülür.
- Proxy sunucuda herhangi bir önbellek mevcut değil ise istek gönderilen kaynak ile alakalı talep ana sunucuya iletilir. Proxy (vekil) bir sunucunun kullanılmadığı durumda istemci istekleri doğrudan web sayfasının barındırıldığı ana sunucuya gider. İstemci — server iletişiminde DNS serverları gibi çok çeşitli serverlarda farklı görevler üstlenir ancak temelde HTTP istemci (user-agent) — server veri alışveriş modeli basitleştirilmiş hali ile bu şekildedir.
- İstemci (user-agent) tarafından erişilmek üzere istek gönderilen web sayfası ile alakalı HTML dokümanı içeren yanıt, sunucu tarafından web tarayıcıya iletilir ve web tarayıcı ilgili kaynağı parse ederek (ayrıştırarak, işleyerek) sayfayı oluşturan ekstra kaynaklar ile alakalı yeni istekler gönderir.
- İstek gönderilen web sayfasını oluşturan CSS, JS, resimler vb sayfa üstü statik kaynaklarda HTTP istek — yanıt akışı ile elde edilir ve web sayfası buna göre oluşturulur.
NOT: İstemci tarafından erişilmek üzere istek gönderilen web sayfalarının tümü için HTTP 200 (OK) yanıt kodu döndürülemeyebilir. İstek gönderilen kaynak yönlendirildiyse (301,302,307), silindiyse (HTTP 404,410) yada sunucu kaynaklı bir hata söz konusu ise HTTP (500 ve türevi) yanıt kodları sunucu tarafından döndürülebilir.
– Web Server (Web Sunucuları)
İstemci — server iletişiminin diğer ucunu temsil eden web server, web sitesi ile alakalı kaynakları barındırır, bunları işler ve istemci (istemcilerden) gelen HTTP isteklerine HTTP yanıtları döndürür. HTTP isteklerine yanıt döndüren sunucu, HTTP başlıklarında sanal olarak tek bir sunucu olarak görünebilir ancak istemciden gelen istekleri dağıtan çoklu sunucu yapılarından oluşan load balancer server yapıları da (istek yüklerini dengeleyen çok sayıda serverdan oluşan web server yapısı) kullanılabilir.
HTTP isteği gönderilen bir dokümanın kaynaklarının birden fazla sunucuda barındırılması ve istek sonrası kaynakların farklı farklı sunuculardan çekilerek yüklenmesi mümkündür. Bir veya birden fazla sunucu tek bir web sayfasını yada web sayfasının belirli bölümlerini oluşturabilir.
– Proxy (Vekil Sunucular)
İstemci — server (istek gönderilen kaynağın barındırıldığı sunucu) iletişimi sürecinde çok sayıda ara sunucu (bilgisayar) HTTP mesajlarının iletilmesinde görev alır. Bilgisayarlar arasında gerçekleşen ağ bağlantısının uygulama (application) katmanında, HTTP akışlarında görev alan ara sunuculara genellikle proxy (vekil sunucu) adı verilir.
Proxyler, ara sunucular olarak istemciden gelen isteklerin doğrudan iletilmesinde, filtrelenmesinde, yetkilendirilmesinde, istek yükünün dağıtılmasında ve önbelleklenmesinde görev alabilirler. Üstlendikleri göreve göre HTTP başlıklarında açık olarak görüntülenebilir yada gizli kalabilirler.
HTTP Mesajları Nedir?
HTTP mesajları (HTTP Messages), bir sunucu ve istemci arasında gerçekleşen veri alışverişinin nasıl yapıldığının aktarıldığı bölümlere verilen isimdir.
HTTP veri alışverişi sürecinde gerçekleşen iki tip mesaj grubu vardır. Bunlar:
- HTTP İstek Mesajları (Request): Sunucuda bir eylemi tetiklemek için istemci tarafından gönderilen isteklere ait mesajlardır.
- HTTP Yanıt Mesajları (Response): HTTP isteklerine verilen yanıtlar ; Sunucu tarafından gönderilen isteklere verilen yanıtlar ve sunucunun gönderdiği yanıta istemcinin verdiği yanıtlar.
HTTP İsteği Nedir?
HTTP isteği (HTTP request), sunucuda bir eylem başlatmak ve erişilmek istenilen kaynağı yüklemek için ihtiyaç duyulan kaynakların yüklenebilmesi için istemci ( kullanıcı aracısı) tarafından gönderilen mesajlardır.
İstemciden gönderilen HTTP istek mesajları, isteklerin kapsamı ile alakalı veriler kodlanmış (encoded) şekilde internet ağı üzerinden yetkili, aracı sunuculara aktarılır.
Bir HTTP isteği birden çok bileşenin birleşimi ile oluşur.
Bunlar:
- HTTP istek satırı
- URL — İstemci, istekte bulunmak ve kaynağa erişmek için gereken bilgileri içeren bir URL’nin bileşenlerini kullanır. Bir URL’nin bileşenleri, erişilmek istenilen kaynağı açıklar. (URL Bileşenleri: HTTP Schema (HTTP — HTTPS), Domain (Host), URL Yolu (Path), Söz dizimi (parametreler))
- HTTP versiyonu ( Örn: HTTP 1/1, 2 yada 3)
- HTTP metodu (GET, POST vb)
- HTTP istek başlığı (HTTP Request Header)
- HTTP İstek Gövdesi (HTTP Request Body) — HTTP istek gövdesi opsiyoneldir.
HTTP İstek Metodları
HTTP istek metodları, istek gönderilen kaynakta gerçekleştirilmesi (başlatılması) istenen eylemi belirtmek için kullanılan methodlara verilen isimdir.
İstemci isteğin gönderildiği sunucuda yapmak istediği işlemi methodlar aracılığı ile HTTP mesajlarını kullanarak aktarır.
Klasik bir HTTP akışında gönderilen HTTP istek metoduna (yöntemine) bağlı olarak sunucu, genellikle istemciye bir HTML dokümanını istek çıktısı olarak döner.
Sunucu gönderilen HTTP isteğine bağlı olarak her zaman bir çıktı dönmek durumunda da değildir. İstemciden gönderilen istek ile sunucu üzerindeki bir verinin silinmesi, güncellenmesi gibi talepler iletilebilir.
- GET
- POST
- PUT
- HEAD
- DELETE
- PATCH
- OPTIONS
- CONNECT
- TRACE
En yaygın iki HTTP yöntemi şunlardır: GET ve POST.
GET Metodu
GET, belirli bir kaynaktan veri istemek için kullanılır.
- GET istekleri önbelleğe alınabilir.
- GET istekleri tarayıcı geçmişinde kalır.
- GET istekleri yer imlerine eklenebilir.
- Hassas verilerle uğraşılırken GET istekleri asla kullanılmamalıdır.
- GET isteklerinin uzunluk kısıtlamaları vardır.
- GET istekleri yalnızca veri istemek için kullanır.
POST Metodu
POST, bir kaynak oluşturmak/güncellemek için bir sunucuya veri göndermek için kullanılır.
POST ile sunucuya gönderilen veriler, HTTP isteğinin istek gövdesinde saklanır.
- POST istekleri asla önbelleğe alınmaz.
- POST istekleri tarayıcı geçmişinde kalmaz.
- POST istekleri yer imlerine eklenemez.
- POST isteklerinin veri uzunluğu konusunda herhangi bir kısaltması yoktur.
Aşağıdaki Tabloda GET ve POST’u karşılaştıralım:
PUT Metodu
PUT, bir kaynak oluşturmak/güncellemek için bir sunucuya veri göndermek için kullanılır.
POST ve PUT arasındaki fark, PUT isteklerinin önemsiz olmasıdır. Yani, aynı PUT isteğini birden çok kez çağırmak her zaman aynı sonucu verir. Buna karşılık, bir POST isteğini art arda çağırmak, aynı kaynağı birden çok kez oluşturmanın yan etkilerine sahiptir.
HEAD Metodu
HEAD, GET ile neredeyse aynıdır, ancak yanıt gövdesi yoktur.
Başka bir deyişle, GET /users bir kullanıcı listesi döndürürse, HEAD /users aynı isteği yapacak ancak kullanıcı listesini döndürmeyecektir.
HEAD istekleri, büyük bir dosya veya yanıt gövdesini indirmeden önce olduğu gibi, gerçekten bir GET isteği yapmadan önce bir GET isteğinin ne döndüreceğini kontrol etmek için kullanışlıdır.
DELETE Metodu
DELETE, belirtilen kaynağı siler.
PATCH Metodu
PATCH, bir kaynağa kısmi değişiklikler uygulamak için kullanılır.
OPTIONS Metodu
OPTIONS, hedef kaynak için iletişim seçeneklerini açıklar.
CONNECT Metodu
CONNECT, istenen kaynakla iki yönlü bir iletişim (bir tünel) başlatmak için kullanılır.
TRACE Metodu
TRACE, hedef kaynak için yolu test eden bir mesaj geri döngü testi gerçekleştirmek için kullanılır.
- Hata ayıklama amaçları için kullanışlıdır.