HTTP Dersleri – Ders 2 – Mimari Yönleri

HTTP Dersleri – Ders 1 – Temel kavramlara genel bakış
HTTP Dersleri – Ders 2 – Mimari Yönleri
HTTP Dersleri – Ders 3 – İstemci Kimliği
HTTP Dersleri – Ders 4 – İstemci Doğrulama Mekanizmaları
HTTP Dersleri – Ders 5 – Güvenlik
HTTP Dersleri – Sözlük

Serinin ilk yazısında, HTTP’nin temel kavramlarından bahsettik. Artık üzerine inşa etmek için bir temelimiz var, HTTP’nin mimari yönlerinden bazıları hakkında konuşabiliriz. HTTP’ye sadece veri göndermek ve almaktan daha fazla şey var.

HTTP kendiliğinden bir uygulama protokolü olarak işlev göremez. Farklı servisler sağlayan ve World Wide Web üzerinden iletişimin mümkün ve verimli olmasını sağlayan bir donanım ve yazılım çözümü biçiminde altyapıya ihtiyaç duyuyor.

Bu makalede, aşağıdakiler hakkında bilgi edineceksiniz:

  • Web Sunucuları
  • Proxy Sunucuları
  • Caching
  • Ağ geçitleri, Tüneller ve Relaysler
  • Web Tarayıcılar

Bunlar İnternet hayatımızın ayrılmaz bir parçasıdır ve bunların her birinin amacı nedir ve nasıl çalıştığını tam olarak öğreneceksiniz. Bu bilgi, ilk makaledeki noktaları birbirine bağlamanıza ve HTTP iletişim akışını daha da iyi anlamanıza yardımcı olacaktır.

Haydi başlayalım.

Web Sunucuları

İlk makalede açıklandığı gibi, bir Web sunucusunun temel işlevi, kaynakları depolamak ve istekleri alır almaz bunları sunmaktır. Web sunucusuna bir Web istemcisi (başka bir deyişle Web tarayıcısı) kullanarak erişirsiniz ve bunun karşılığında istenen kaynağı alır veya varolanların durumunu değiştirirsiniz. Web sunucularına, Web tarayıcılarını kullanarak otomatik olarak da erişilebilir; bu konuda daha sonra bahsedeceğiz.

En popüler Web sunucularından bazıları ve muhtemelen duyduğunuz olanlar Apache HTTP Sunucusu, Nginx, IIS, Glassfish’tir …

Web sunucuları çok basit ve kullanımı kolay olandan sofistike ve karmaşık yazılım parçaları arasında değişenlik gösterebilir. Modern Web sunucuları, çok farklı görevleri yerine getirebilirler. Web sunucusunun yapabileceği temel görevler:

  • Bağlantı kurma – müşteri bağlantısını kabul etme veya kapatma
  • Alma isteği – bir HTTP istek mesajını okuma
  • İşlem isteği – istek mesajını yorumlayın ve harekete geçin
  • Erişim kaynağı – mesajda belirtilen kaynağa erişin
  • Yanıt oluştur – HTTP yanıt mesajını yarat
  • Yanıt gönder – cevabı istemciye geri gönderin.
  • İşlemi kaydet – tamamlanan işlemi hakkında bir günlük dosyasına yaz

Web sunucusunun temel akışını birkaç farklı aşamada anlatacağım. Bu aşamalar, Web sunucusu akışının çok basitleştirilmiş bir sürümünü temsil eder.

Aşama 1: Bağlantı kurma

Web istemcisi Web sunucusuna erişmek istediğinde, yeni bir TCP bağlantısı açmaya çalışır. Diğer taraftan, sunucu istemcinin IP adresini bulur. Bundan sonra, bu istemciye TCP bağlantısını açmaya veya kapatmaya karar vermek sunucuya kalmış.

Sunucu bağlantıyı kabul ederse, onu mevcut bağlantıların listesine ekler ve o bağlantıdaki verileri izler.

İstemci yetkili değilse veya kara listeye alınmışsa (kötü niyetli) bağlantıyı da kapatabilir.

Sunucu ayrıca “ters DNS” kullanarak istemcinin ana bilgisayar adını belirlemeyi deneyebilir. Bu bilgiler, iletileri günlüğe kaydederken yardımcı olabilir ancak ana makine ad aramaları biraz zaman alabilir ve işlemleri yavaşlatabilir.

Aşama 2: İsteklerin Alınması / İşlenmesi

Gelen istekleri ayrıştırırken, Web sunucuları, bilgi isteği satırından, üstbilgilerinden ve gövdesinden (varsa) bilgi ayrıştırır. Dikkat edilmesi gereken bir husus, bağlantıyı istediğiniz zaman duraklatabilmesidir ve bu durumda, sunucunun verileri geri kalan kısmı alana kadar geçici olarak depolaması gerekir.

Üst düzey Web sunucuları, birçok eş zamanlı bağlantı açabilmelidir. Bu, aynı istemciden gelen birden çok eşzamanlı bağlantıyı içerir. Tipik bir web sayfası sunucudan birçok farklı kaynak isteyebilir.

Aşama 3: Kaynağa erişme

Web sunucuları öncelikli olarak kaynak sağlayıcıları olduklarından, kaynakları eşlemek ve erişmek için birden çok yolları vardır.

En basit yolu, kaynağı eşlemek için Web sunucusunun dosya sistemindeki dosyayı bulmak için istek URI’sini kullanmaktır. Genellikle, kaynaklar docroot adı verilen sunucu üzerindeki özel bir klasöre yerleştirilir. Örneğin, Windows sunucusundaki docroot, F:\WebResources\ üzerinde bulunabilir. Bir GET isteği, /images/codemazeblog.txt dosyasındaki dosyaya erişmek istiyorsa, sunucu bunu F:\WebResources\images\codemazeblog.txt dosyasına çevirir ve bu dosyayı yanıt mesajında ​​döndürür. Web sunucusunda birden fazla web sitesi barındırıldığında, her biri ayrı bir docroot’a sahip olabilir.

Bir Web sunucusu, bir dosya yerine bir dizin için bir istek alırsa, birkaç yolu ile çözebilir. Bir hata mesajı döndürebilir, dizin yerine varsayılan dizin dosyasını döndürür veya dizini tarar ve içeriği HTML dosyasına döndürebilir.

Sunucu ayrıca, istek URI’sini dinamik kaynağa – dinamik sonuç üreten bir yazılım uygulaması – eşleştirir. Web sunucularını karmaşık yazılım çözümlerine bağlamak ve dinamik içeriği sunmak için kullanılan uygulama sunucuları denilen bir sunucu sınıfı vardır.

Aşama 4: Yanıt üretme ve gönderme

Sunucu, sunması gereken kaynağını belirledikten sonra yanıt mesajını oluşturur. Yanıt mesajında durum kodu, yanıt başlıkları ve gerekirse yanıt gövdesi bulunur.

Yanıt içinde gövde varsa, mesaj genellikle gövdenin boyutunu açıklayan Content-Length üstbilgisini ve döndürülen kaynağın MIME türünü açıklayan Content-Type üstbilgisini içerir.

Yanıt üretildikten sonra, sunucu yanıt göndermek için ihtiyaç duyduğu istemciyi seçer. Sürekli olmayan bağlantılar için, sunucunun tüm yanıt mesajı gönderildiğinde bağlantıyı kapatması gerekir.

Aşama 4: Günlüğe kaydetme

İşlem tamamlandığında, sunucu tüm işlem bilgilerini dosyaya kaydeder. Birçok sunucu, özelleştirilmiş günlükleme sağlar.

Proxy Sunucuları

Proxy sunucuları (proxies) aracı sunuculardır. Genellikle Web sunucusu ile Web istemcisi arasında bulunurlar. Proxy sunucularının nitelikleri gereği hem Web istemcisi hem de Web sunucusu gibi davranmaları gerekir.

Ama neden Proxy sunucularına ihtiyacımız var? Neden sadece Web istemcileri ve Web sunucuları arasında doğrudan iletişim kurmuyoruz? Bu çok daha basit ve daha hızlı değil mi?

Basit olabilir, ama daha hızlı? Daha hızlı değil gerçekten. Ama buna geleceğiz.

Proxy sunucuların hangi vekil için kullanıldığını açıklamadan önce, birşeyden bahsetmem lazım. Anlatacağım şey ters proxy kavramı veya ileri proxy ile ters proxy arasındaki farktır.

Yönlendirmeli proxy, bir Web sunucusundan kaynak isteyen istemci için bir vekil görevi görür. İstemciyi güvenlik duvarından filtreleyerek veya istemciyle ilgili bilgileri gizleyerek korur. Ters proxy tam tersi şekilde çalışır. Genellikle güvenlik duvarının arkasına yerleştirilir ve Web sunucularını korur. Tüm istemcilerin bildiği gibi, gerçek Web sunucusuyla konuşurlar ve ters proxy’nin arkasındaki ağdan habersiz kalırlar.

Proxy Sunucu

Proxy Sunucu

Ters Proxy Sunucu

Ters Proxy Sunucu

Proksiler çok faydalıdır ve uygulamaları oldukça geniştir. Şimdi, proxy sunucuların bazı yollarını inceleyelim.

  • Sıkıştırma – İçeriğin sıkıştırılması iletişim hızını doğrudan arttırır. Bu kadar basit.
  • İzleme ve filtreleme – İlkokuldaki çocuklara yetişkinlere yönelik web sitelerine erişimi reddetmek ister misiniz? Proxy sizin için doğru çözüm.
  • Güvenlik – Proksiler, tüm ağa tek bir giriş noktası olarak hizmet edebilir. Kötü amaçlı uygulamaları tespit edebilir ve uygulama düzeyindeki protokolleri kısıtlayabilirler.
  • Anonimlik – Daha geniş bir anonimlik elde etmek için istekler proxy tarafından değiştirilebilir. Hassas bilgileri isteğinden çıkarabilir ve sadece önemli şeyleri bırakabilir. Sunucuya daha az bilgi gönderirken kullanıcı deneyimi de düşebilir, ancak bazen anonimlik daha önemli faktördür.
  • Erişim kontrolü – Oldukça basit, birçok sunucunun erişim denetimini tek bir proxy sunucu üzerinde merkezileştirebilirsiniz.
  • Önbelleğe alma – Popüler içeriği önbelleğe almak için proxy sunucusunu kullanabilirsiniz ve böylece yükleme hızlarını önemli ölçüde düşürebilirsiniz.
  • Yük dengeleme – “Pik trafiği” çok alan bir hizmetiniz varsa, iş yükünü daha fazla hesaplama kaynağına veya Web sunucularına dağıtmak için bir proxy kullanabilirsiniz. Zirve gerçekleştiğinde tek sunucunun aşırı yüklenmesini önlemek için yük dengeleyicileri trafiği yönlendirir.
  • Transcoding – İleti gövdesinin içeriğini değiştirme, proxy’nin sorumluluğu da olabilir

Görebildiğiniz gibi, vekiller çok yönlü ve esnek olabilir.

Caching

Web önbellekleri, istenen verilerin kopyalarını otomatik olarak üreten ve bunları yerel olarak saklayan aygıtlardır.

Bunu yaparak şunları yapabilirsiniz:

  • Trafiği azaltır
  • Ağ darboğazlarını ortadan kaldırır
  • Sunucu aşırı yüklenmesini önler
  • Uzun mesafelerde tepki gecikmesini azaltır

Dolayısıyla, Web ön belleklerinin hem kullanıcı deneyimini hem de Web sunucusu performansını iyileştirdiğini söyleyebilirsiniz. Ve elbette, potansiyel olarak daha çok para kazanabilirsiniz.

Önbellekten sunulan isteklerin bir kısmına Hız Oranı denir. 0’dan 1’e değişebilir, burada 0,% 0’dır ve 1,% 100 istekte bulunur. İdeal amaç elbette% 100 elde etmektir, ancak gerçek sayı genellikle% 40’a yakındır.

İşte temel Web önbellek iş akışının görünüşü:

İşte temel Web önbellek iş akışının görünüşü

Ağ geçitleri, Tüneller ve Relay

Zamanla, HTTP olgunlaştıkça insanlar onu kullanmanın birçok farklı yolunu buldular. HTTP, farklı uygulamalar ve protokolleri bağlamak için bir çerçeve olarak kullanışlı hale geldi.

Nasıl olduğunu görelim.

Ağ geçitleri

Ağ geçitleri, HTTP’nin bir kaynak almanın bir yolunu özetleyerek farklı protokoller ve uygulamalarla iletişim kurmasını sağlayabilecek donanım parçaları anlamına gelir. Bunlara protokol dönüştürücüleri denir ve çoklu protokollerin kullanılması nedeniyle yönlendiricilerden veya anahtarlardan çok daha karmaşıktır.

Örneğin, bir HTTP isteği göndererek dosyayı FTP üzerinden almak için bir ağ geçidi kullanabilirsiniz. Veya SSL üzerinden şifreli bir mesaj alabilir ve HTTP (Client-Side Security Accelerator Ağ Geçitleri) haline getirebilir veya HTTP’yi daha güvenli HTTP mesajlarına (Sunucu Taraflı Güvenlik Ağ Geçitleri) dönüştürebilirsiniz.

Tüneller

Tüneller CONNECT istek yöntemini kullanır. Tüneller, HTTP üzerinden HTTP olmayan verileri göndermeyi mümkün kılar. CONNECT yöntemi, tünelin hedef sunucuya bir bağlantı açmasını ve verileri istemci ile sunucu arasında geçirmeyi ister.

CONNECT istek örneği;

CONNECT api.github.com:443 HTTP/1.0
User-Agent: Chrome/58.0.3029.110
Accept: text/html,application/xhtml+xml,application/xml

CONNECT yanıtı;

HTTP/1.0 200 Connection Established
Proxy-agent: Netscape-Proxy/1.1

CONNECT yanıtının normal bir HTTP yanıtının aksine Content-Type’ı belirtmesi gerekmez.

Bağlantı kurulduktan sonra, veriler doğrudan istemci ve sunucu arasında gönderilebilir.

Relay

Relay’ler, HTTP dünyasının kanunlarına aykırıdır ve HTTP yasalarına uymak zorunda değildirler. Bunlar, istek mesajlarındaki asgari bilgileri kullanarak bir bağlantı kurabildikleri sürece almış oldukları bilgiyi ileten vekillerin dumb-down versiyonlarıdır.

Tek amacı, olabildiğince az sorunla bir vekil uygulama ihtiyacını karşılamaktır. Bu aynı zamanda potansiyel olarak belaya da yol açabilir, ancak kullanımı çok kullanışlıdır ve Relay’ler kullanılırken dikkate alması gereken bir yarar oranı kesinlikle vardır.

Örümcekler (Web Crawler)

Arama Motorları - Web Crawler)

Yaygın olarak örümcek diye adlandırılan, World Wide Web üzerinde gezinen ve içeriğini dizine alan botlardır. Örümcekler, Arama motorlarının ve diğer birçok web sitesinin temel aracıdır.

Örümcekler tamamen otomatikleştirilmiş bir yazılım parçasıdır ve çalışması için insan etkileşimine gereksinim duymaz. Örümceklerin karmaşıklığı çok çeşitlilik gösterebilir ve bazı örümcekler oldukça karmaşık yazılım parçalarıdır (arama motorlarının yaptığı gibi).

Örümcekler, ziyaret ettikleri web sitesinin kaynaklarını tüketir. Bu nedenle, genel web siteleri, tarayıcılara web sitesinin hangi bölümlerini tarayacaklarını veya hiçbir şey taramayacaklarını söyleyecek bir mekanizmaya sahiptir. Bu, robots.txt (robot hariç tutma standardı) kullanılarak yapılabilir.

Tabii ki, bu sadece bir standart olduğundan, robots.txt, davetsiz örümceklerin web sitesini taramasını engelleyemez. Kötü niyetli robotlardan bazıları e-posta biçerdöverleri, spambotlar ve zararlı yazılımları içerir.

Robots.txt dosyalarının birkaç örneği:

User-agent: *
Disallow: /

Bu, tüm örümceklere dışarıda kalmalarını söyler.

User-agent: *
Disallow: /somefolder/
Disallow: /notinterestingstuff/
Disallow: /directory/file.html

Bu sadece belirli dizinlere ve tek bir dosyaya atıfta bulunur.

User-agent: Googlebot
Disallow: /private/

Bu durumda olduğu gibi belirli bir örümceği (Google Botu) engelleyebilirsiniz.

World Wide Web’in geniş doğası göz önüne alındığında, şimdiye kadarki en güçlü örümcekler bile tamamını tarayıp endeksleyemez. Bu nedenle, seçim politikasını, en alakalı bölümlerini taramak için kullanıyorlar. Ayrıca, WWW sık sık ve dinamik olarak değişir, bu nedenle örümceklerin web sitelerini tekrar ziyaret etip gerekmediğini hesaplamak için tazelik politikasını kullanmaları gerekir. Örümcekler, sunucuları çok fazla hızlı talep ederek kolayca zorlayabilirler, bu nedenle de bir nazik politika uygulanır. Bilinen örümceklerin çoğu, sunucudaki yükü üretmekten kaçınmak için sunucuları yoklamak için 20 saniyelik aralıklarla 3-4 dakikalık aralıklarla çalışırlar.

Gizemli ve kötü derin web veya karanlık web haberini duymuş olabilirsiniz. Web’in bir parçası değildirler, bilgiyi gizlemek için kasıtlı olarak arama motorları tarafından dizine eklenmiyorlar.

Sonuç

Şimdi, HTTP’nin nasıl çalıştığına dair daha iyi bir resme sahip olmalısınız ve isteklere, yanıtlara ve durum kodlarına göre çok daha fazlasını bulacaksınız. HTTP’nin, bir uygulama protokolü olarak potansiyelini elde etmek için kullandığı farklı donanım ve yazılım parçaları içeren bir bütün altyapı vardır.

Bu makalede bahsettiğim her kavram, tüm makaleyi veya bir kitabı bile kapsayacak kadar büyük. Hedefim, sizi nasıl kabaca birbirinden farklı fikirlerle buluşturmaktı, böylece hepsinin nasıl bir araya geldiğini ve ihtiyaç duyulduğunda neye bakacağını biliyorsunuz.

Açıklamaların bazılarını biraz kısa ve belirsiz bulduysanız ve önceki makalelerimi kaçırdıysanız, serinin 1. bölümünü ve HTTP’nin temel kavramları hakkında konuştuğum HTTP referansını ziyaret ettiğinizden emin olun.

Okuduğunuz için teşekkürler ve sunucuların istemcileri tanımlamak için kullanabileceği farklı yolları açıkladığım dizinin 3. bölümüne bakmaya devam edin.

Bu makaleyi kullanışlı buluyorsanız  lütfen bir açıklama bırakın.

Bir sonraki ders: HTTP Dersleri – Ders 3 – İstemci Kimliği

Referanslar;

Orijinal Yazı: https://www.code-maze.com/http-series-part-2/

5 1 vote
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments