Ünite 2: Web Mimarisi

Giriş

İnternet ve web, aynı yapıyı ifade etmek amacıyla çoğu zaman birbirlerinin yerine kullanılan terimlerdir. Gerçekte ise bu iki terim birbirleri ile ilişkili olmalarına rağmen birbirlerinden tamamen ayrı iki yapıyı tanımlarlar ve eş anlamlı değillerdir. İnternet, dünya genelinde milyonlarca bilgisayar ve mobil cihazın iletişimde bulunabilmeleri amacıyla birbirlerine bağlanmasını sağlayan donanımsal bir altyapıyı ifade etmektedir. Web ise internet ortamı üzerinden bilgiye ulaşmanın yollarından biridir ve internetin önemli hizmetlerinden http protokolünü kullanır.

Web Mimarisi

Seksenlerin sonları ve doksanların henüz başlarında internet bugün bildiğimiz ve alışık olduğumuz internete benzemiyordu. Bu dönemlerde, internet deneyimi e-posta ve metin tabanlı sistemler ile sınırlıydı. Seksenlerin internet deneyiminden günümüz internet deneyimine geçiş, web’in (World Wide Web-WWW) icadı ve kitlesel büyümesi sayesinde mümkün olabilmiştir.

Web başlangıçta dünya genelindeki üniversite ve enstitülerde araştırma yapan bilim insanları arasında ihtiyaç duyulan otomatik bilgi paylaşım talebini karşılamak amacıyla tasarlanmıştır. 1989 yılında, İsviçre ve Fransa sınırında yer alan dünyanın en büyük parçacık fiziği laboratuvarı olan Avrupa Nükleer Araştırma Merkezinde (CERN) bilgisayar programcısı olarak çalışan İngiliz bilim insanı Tim Berners-Lee tarafından web ile ilgili ilk öneri yazılmıştır. Aralık 1990 yılında Robert Cailliau, Berners-Lee’nin önerisini yeniden yazmıştır. Başlarda çok fazla ilgi görmemesine rağmen, Berners-Lee web için önemli olan üç ana bileşeni geliştirmeye devam etmiştir. Bu bileşenler, http, html ve dünyanın ilk grafik tarayıcısı olan “theWorldWideWeb”. Bu tarayıcı aynı zamanda bir web sayfası düzenleyicisiydi. Web, 8 Haziran 1991 tarihinde dünyaya duyuruldu.

CERN laboratuvarlarındaki ilk web sitesi, World Wide Web projesi olarak Berners-Lee’nin NeXT bilgisayarında barındırılmıştır. Bu web sitesi sadece CERN laboratuvarlarındaki değil aynı zamanda dünyadaki ilk web sitesi olarak da tarihteki yerini almıştır. İlk web sitesi, web sisteminin temel özelliklerinin anlatıldığı; diğer araştırmacıların belgelerine erişimin ne şekilde gerçekleşeceğinin ve kendinize ait bir sunucuyu nasıl kuracağınızın açıklandığı bir web sitesiydi.

30 Nisan 1993 tarihinde CERN, web yazılımının kaynak kodlarını herkese açık olarak yayınladı. Böylelikle, temel bir tarayıcı ve kod kütüphanesi ile birlikte, serbestçe kullanılabilir bir web sunucusu çalıştırmak için gerekli yazılımların geliştirilmesinin önü açılmış oldu. Bu adım web’in geniş kitlelerce kullanılmasını ve hızla yayılmasını sağlamıştır.

Web’in arkasındaki temel fikir, istemci-sunucu (clientserver) uygulama modeli ve hiper metin belgelere dayanmaktadır. Başlangıç web mimarisini meydana getiren ve halen günümüz web mimarisinin de ana bileşenleri olan temel özellikler aşağıda listelenmiştir.

  • Web sunucu yazılımı: HTTP isteklere cevap veren bir yazılımdır.
  • Web tarayıcı yazılımı: URL’ler yardımıyla http isteklerinde bulunur ve web sunucusundan gönderilen html sayfaları görüntüler.
  • Tekdüzen kaynak konumlayıcı (Uniform Resource Locator-URL): Web üzerinde yer alan kaynakların benzersiz bir şekilde konumlandırılmasını sağlayan açık bir standarttır.
  • Hiper metin transfer protokolü (Hypertext Transfer Protocol-HTTP): İnternet üzerinden iletilecek istek (request) ve cevapların (response) ne şekilde işleneceğini belirler.
  • Hiper metin işaretleme dili (Hypertext Markup Language-HTML): Web sayfalarını oluşturmak ve diğer kaynaklara bağlantı sağlamak amacıyla kullanılır.

İstemci-Sunucu Modeli

Web mimarisi, istemci-sunucu uygulama modelini kullanır. Bu modelde istemci olarak isimlendirilen ve temel özelliği, tekdüzen kaynak konumlayıcıları (URL) kullanarak belirli sunuculardan belirli kaynaklara istekte bulunabilmek olan bir bilgisayar bulunmaktadır. İstemcisunucu modelinde yer alan sunucuların temel özelliği ise, istemciler tarafından herhangi bir istekte bulunulup bulunulmadığının dinlenmesi ve eğer varsa bir mesaj ile cevap verilmesidir.

Tekdüzen Kaynak Konumlayıcı (Uniform Resource Locator-URL)

Web üzerinde bulunan her sayfa ve kaynağın kendine ait özel bir konumu (adresi) bulunmaktadır. Bu özel konum “tekdüzen kaynak konumlayıcı” olarak Türkçeleştirilen ve İngilizce Uniform Resource Locator ifadesindeki kelimelerin baş harflerinden oluşmuş olan URL’ler ile gösterilir. Web üzerinde yer alan kaynakların benzersiz bir şekilde tanımlanmasını sağlayan bir standart olan URI’ nın en sık görülen formudur.

Protokol

URL ifadelerin ilk bölümü web üzerindeki kaynağa erişimde kullanılacak olan protokolün hangisi olduğunu gösterir.

  • http: Hiper metin türündeki web kaynaklarına erişim sağlanabilir.
  • https: Hiper metin türündeki web kaynaklarına güvenli (şifrelenmiş) bir bağlantı üzerinden erişim sağlanabilir.
  • ftp: İnternet üzerindeki bir dosya sunucusunda bulunan dosyaya erişim sağlanabilir.
  • telnet: İnternet üzerindeki bir telnet sunucusuna erişim sağlanabilir.
  • e-posta (mailto): Posta Kutusuna erişim sağlanabilir.
  • dosya: URL’nin işlendiği bilgisayar üzerinde bulunan bir dosyaya erişim sağlanabilir.

.Alt Etki Alanı Adı

Alt etki alan adları, etki alan adınızın kapsadığı bölge içerisinde yer alan başka bir IP adresli sunucuya veya bilgi/belge hiper metin içeren bir klasöre URL’ler yardımıyla doğrudan erişimde bulunmak için kullanılan yapılardır.

Etki Alanı Adı

Etki alan adı ile URL’ler yardımıyla web üzerinden erişim sağlanmak istenen kaynağın bulunduğu sunucu tanımlanmaktadır.

Klasör Adı

Klasör adı, bilgisayarlarda yer alan dosya sistemi üzerinde işlem yapan herkesin yakından bildiği bir kavramdır. Bir dosyanın konumu belirtilirken içinde bulunduğu klasör ile ifade edilir. Web sunucu yazılımının ana (root) klasörü, web sunucusu üzerindeki herhangi bir klasöre karşılık gelir ve web sitelerini oluşturan sayfalar bu klasör altında yer alır. Web sunucu yazılıma ait ana klasörün yeri kullanılan işletim sistemi ve web sunucu yazılımına göre değişiklik gösterir.

Dosya Adı

Web üzerinden URL yardımıyla erişilmek istenen hiper metin veya çoklu ortam dosyalarının adıdır. URL içinde dosya adı belirtilmediğinde, istemciye cevap olarak hangi dosyanın dönüleceğine web sunucu yazılımı karar verir.

Referans Adı

URL’de yer alan son bileşen referans adıdır. Bu bölüm istenen kaynak web sayfasının belli bir bölümüne erişilmek istendiğinde kullanılır. Tarayıcılar URL sonunda referans adını gördüklerinde web sunucu yazılımının cevap olarak döndüğü sayfada referans adıyla verilen bölümü arar. Cevap olarak dönülen hiper metin içinde aynı referans (HTML etiketlerdeki ID öz niteliği) adına sahip benzersiz bir bölüm olmak zorundadır.

Diğer URL Bileşenleri

Bir URL yapısında yukarıda açıklanan 7 temel bileşenin yanında, bazı özel durumlarda ya da isteğe bağlı olarak kullanılmak üzere URL yapısına eklenen bileşenler de bulunabilmektedir. Kullanıcı adı ve parola, port numarası ve sorgu dizisi (query string) bileşenleri URL yapısına isteğe bağlı olarak eklenebilmektedir.

URL ile yapılan ftp protokol isteğinde web tarayıcıları dosya sunucularına otomatik olarak anonim (anonymous) kullanıcı olarak bağlanılmasını sağlarlar.

İstek-Cevap Döngüsü

Bu döngü içerisindeki istemci ve sunucular arasında bilgi alışverişinin nasıl gerçekleşeceğine dair kural ve yöntemler http protokolü tarafından düzenlenir.

HTTP, sunucu tarafında aksi belirtilmediği sürece varsayılan olarak 80 numaralı port üzerinden TCP bağlantısı kurar. Sunucu, istekleri bu port üzerinden dinler. Bir istek geldiğinde cevap kodu (response code), başlık (headers) ve hiper metin içerikleri cevap olarak istemciye geri döner. Kullanıcıların web siteleri ile gerçekleştirdikleri kullanıcı deneyimi, masaüstü yazılımlar ile gerçekleştirdiklerinden farklıdır. Kullanıcılar uygulama indirmek ve kurmak yerine URL’ler yardımıyla erişim sağlarlar. Web sunucusundan istekte bulunulan sayfanın tamamının tek bir HTTP cevabı olarak geri döndüğü düşünülür. Oysaki tek bir HTTP cevabın geri dönmesi web sayfasının görüntülenmesi için yeterli değildir. Bir web sayfasının istekte bulunulduktan sonra tamamının web tarayıcısında görüntülenebilmesi için birden fazla HTTP cevabın geri döndürülmesine ihtiyaç vardır.

HTTP istek ve cevapları ile birlikte TCP bağlantı üzerinden başlık (headers) bilgileri gönderilir. Bu bilgiler HTTP işlemi için kodlanmış bazı alanları içerir. Web sunucusu tarafından istemciye nasıl bir cevap gönderileceği bu alanlarda kodlanmış bilgiler yardımıyla tanımlanır.

İstek başlık alanları (Request Headers), istemci bilgisayar ile ilgili verileri içerir. Web geliştiricileri bu bilgileri istatistiksel amaçlı ve web sitesini kullanıcılara göre özelleştirmek amacıyla kullanabilirler. Cevap başlık alanları (Response Headers), web sunucusunun, bulunulan isteğe karşı geri döndüğü cevap ve göndereceği veri ile ilgili bilgileri içerir.

İstek Yöntemleri

HTTP protokolünde farklı tipte istek yöntemleri (request method) bulunmaktadır.

  1. GET: http istek yöntemleri arasında varsayılan yöntemdir. Bu yöntemde belirli bir URL ile konumlandırılmış kaynak sunucudan istenir. Çoğu zaman web tarayıcısı adres çubuğuna bir URL girildiğinde, bir yer imi ya da bağlantı tıklandığında GET isteği gerçekleştirilmiş olur. Web tarayıcı adres çubuğunda değişken adı ve değerlerinin de görüntülenmesi, GET yöntemiyle istemci tarafından sunucu tarafına hassas verilerin (kullanıcı, parola, kredi kartı numarası vb.) iletiminde güvenlik açıklarının oluşmasına sebep olmaktadır. Bu yüzden, web sayfalarından web sunucularına veri iletilmesi gerektiğinde daha çok POST istek yöntemi tercih edilmektedir.
  2. POST: İstemci tarafında kullanıcılar tarafından girilen veriler istek başlığı üzerinden iletilir. Veriler URL ile iletilmediği için web tarayıcısı adres çubuğunda görüntülenmezler. POST yöntemi ile veri iletimi GET yöntemine göre daha güvenlidir.
  3. HEAD: GET yöntemine benzer şekilde istek gerçekleştirilir. Tek fark, bu yöntemle yapılan isteklere geri dönülen cevap sadece başlık bilgisini içerir. Arama motorları, web sayfasının tekrar indekslenmesine gerek olup olmadığını sorgularken bant genişliğinden tasarruf etmek amacıyla bu yöntemden faydalanırlar.
  4. PUT: İstemciden sunucuya gönderilen veriler ile yeni bir kaynak (dosya) yaratılacak ise istek yöntemi olarak PUT yöntemi kullanılır. Eğer dosya sunucuda mevcutsa üzerinde değişiklik yapılır.
  5. OPTIONS: İstek-cevap döngüsü içinde mevcut iletişim seçenekleri hakkında bilgi sahibi olmak için kullanılan yöntemdir.
  6. DELETE: Bu yöntemle sunucu bilgisayarda bulunan bir kaynak silinir.
  7. TRACE: Sunucunun, HTTP mesajı ile kendisine iletilen mesajın tamamının bir kopyasını cevap mesajın gövdesinde geri döndürdüğü istek yöntemidir. Bu yöntemle istemci ve sunucu bilgisayarlar bir vekil sunucu üzerinden iletişimde bulunuyorlarsa vekil sunucunun ve gerçekleştirdiği değişikliklerin tespit edilmesi mümkün olabilmektedir.

Cevap Kodları

Cevap kodları (response codes), cevap başlığının bir parçası olarak web sunucu yazılımının geri döndüğü tamsayı değeridir. HTTP durum kodları olarak da tanımlanırlar. Bu kodlar, isteğin durumu hakkında bilgi vermektedir.

Güncel Web Teknolojileri

Web mimarisi ile ilgili olarak 1989 yılında yapılan ilk öneriden itibaren hem internet hem de web teknolojilerinde sayısız değişim ve gelişme meydana gelmiştir. Web tarayıcı ve sunucu yazılımları, URL, HTTP, HTML gibi web mimarisi temel bileşenlerine, teknolojide yaşanan dijital devrimin etkisiyle yeni işlevler kazandırılmış ve standartları geliştirilmiştir. Web mimarisi temel bileşenlerini desteklemek ve gücünü arttırmak amacıyla geliştirilmiş ve hâlen geliştirilmekte olan birçok web teknolojisi bulunmaktadır. Bu teknolojilerin geliştirilmesi ve koordinasyonu için çalışan birçok topluluk bulunmaktadır. Tim Berners Lee’nin CERN’den MIT’ye (Massachusetts Institute of Technology) gelip 1994 yılında kurduğu ve halen başkanlığını sürdürdüğü Dünya Genelinde Ağ Konsorsiyumu (World Wide Web Consortium – W3C) açık web standartları geliştirmek ve iyileştirmek için kurulmuş olan uluslararası bir topluluktur.

Sunucu tarafında çalışan betik (script) dillerinin ve yine sunucu tarafında çalışan ve dinamik web sayfaları üretebilen teknolojilerin ortaya çıkmasıyla birlikte sunucu istemci arasında çift yönlü bilgi paylaşımına imkân sağlanmıştır. Web kullanıcıları, sadece bilgi arayan ya da bilgi edinen pasif kullanıcı değil aynı zamanda bilgi üreten ve paylaşan kullanıcılar hâline gelmişlerdir.

Günümüzde web siteleri yerine web uygulamaları kavramı sıklıkla kullanılmaktadır. Web uzmanı terimi yerine artık, popüler olan web uygulama geliştiricisi ve web tasarımcısı terimleri kullanılmaktadır. Web teknolojileri ise istemcisunucu web mimarisi içinde ön-yüz web teknolojileri ve arka-yüz web teknolojileri olarak iki grupta ele alınmaktadır.

Ön-Yüz Web Teknolojileri

Web sitelerine ve web uygulamalarına erişmek amacıyla tarayıcı adres çubuğuna URL girildikten sonra tarayıcı penceresinde görülen, dokunulan ve etkileşime geçilen tüm sayfa bileşenleri ön-yüz web teknolojilerinin bir araya gelmesiyle oluşturulmaktadır. Temelde hiper-metin işaretleme dili (HTML), betik dili JavaScript ve stil düzenleme standardı CSS teknolojilerini bir araya getirir. Ön-yüz web teknolojilerini kullanarak web uygulaması geliştiren kişilere ön-yüz geliştirici adı verilmektedir.

Arka-Yüz Web Teknolojileri

Arka-yüz web teknolojileri çoğu zaman web kullanıcısına görünmeyen fakat web sitesinin çalışmasını sağlayan, web sitesine güç veren teknolojilerdir. Arka-yüz web teknolojileri web sunucusu, veritabanı sunucusu ve sunucu-taraflı uygulama ya da betikleri içerir. Web kullanıcıları arka-yüz teknolojiler ile doğrudan etkileşimde bulunmazlar fakat bu teknolojiler arka planda her zaman çalışırlar. Bilginin veritabanından istemci web tarayıcısına ulaşması bu teknolojiler yardımıyla gerçekleşir.

Arka-yüzde yaygın kullanıma sahip kullanılan sunucutaraflı programlama dilleri ve uygulama çatısı teknolojilerinden kısaca bahsedelim.

  • PHP: Veritabanından aldığı bilgi üzerinde düzenleme yapacak şekilde tasarlanmış olan PHP web teknolojileri arasında en popüler olanıdır. CodeIgniter, Symfony, Yii, Zend, Laravel ve CakePHP yaygın kullanıma sahip php uygulama çatılarıdır.
  • Java: Sloganı “Bir kere derle, her yerde çalıştır.” olan javanın kurumsal sürümü Java EE (enterprise edition) özellikle büyük çaplı kurumsal projelerin ihtiyaçları için geliştirilmiş Java teknolojilerinin bütünün oluşturduğu çerçeve ve standarda verilen isimdir. Java EE uygulamalarının çalışabilmesi için bu platformu destekleyen uygulama sunucularının kullanılması gerekmektedir. Yüksek ziyaretçi trafiğinin olduğu web sitelerinin ve Android tabanlı taşınabilir cihaz uygulamalarının geliştirilmesinde kullanılır. Google Web Toolkit, Play, Spring, Vaadin, ZK yaygın kullanıma sahip java web uygulama çatılarıdır.
  • Ruby: PHP ve SQL çiftinin birlikte sunduğu veritabanı işlevselliğini tek başına sağlayan Ruby, veritabanında karmaşık bir iş mantığı bulunan sitelerin oluşturulmasında kullanılır. Yüksek ziyaretçi trafiği bulunan web sitelerinin hızlı geliştirilmesi ve bakım kolaylığı sebebiyle Ruby son yıllarda oldukça fazla tercih edilen bir sunucu-taraflı programlama dilidir. Oldukça geniş bir kütüphaneye sahip olan ve arka-yüz yazılım geliştirmeyi kolaylaştıran Ruby on Rails web uygulama çatısına ihtiyaç duyar.
  • Python: Youtube ve Google sitelerinin de kendisinden güç aldığı Python basit sözdizimi sayesinde kolay öğrenebilir bir programlama dilidir. Kurumsal ve büyük ölçekli yazılım prototiplerinin hızlı bir şekilde üretilip denenmesi gerektiği durumlarda tercih edilebilir. Web uygulama çatısı olarak Django, Flask ve Pyramid uygulama çatıları ile birlikte kullanılabilir.

Web İstemcileri

Günümüz web uygulamaları dört katmanlı bir mimariye sahip bulunmaktadır. Bu dört katmandan üç tanesi sunucu, bir tanesi de istemci tarafında bulunan katmanlardır.

Web istemcileri üzerinde, web sunucularına HTTP istek mesajları göndererek erişimde bulunan ve web sunucusundan gelen HTTP cevaplarını işleyen yazılımlar yer alır. Genel olarak, web istemcileri web sunucularına doğrudan kullanıcı erişimi sağlayacak şekilde tasarlanırlar. Bununla birlikte, günümüzde bazı web istemcileri de doğrudan herhangi bir kullanıcı tarafından kullanılmayacak şekilde tasarlanabilirler.

Çerezler (cookies): Çerez, isim ve değerden oluşan bir çifttir. Web uygulaması çoklu çerezler oluşturabilir, milisaniye cinsinden her bir çerezin ne kadar yaşam ömrü olacağını ayarlar ve web tarayıcıya HTTP cevap mesajının bir parçası olarak gönderir. Aynı bilgisayar üzerinden ve aynı web tarayıcısından çerezleri oluşturan web uygulamasına tekrar bağlanıldığı zaman yaşam süresi dolmamış olan tüm çerezler http istek mesajının bir parçası olarak web uygulamasına tekrar gönderilir. Oturum verilerinin çerezler içinde saklanması en basit yaklaşım olmakla birlikte güvenli veya verimli bir yaklaşım değildir.

Gizli Alanlar (Hidden Field): Bazı kullanıcılar, çerezlerin güvenli olmaması sebebiyle büyük endişeleri vardır ve bu yüzden çerez desteğini devre dışı bırakırlar. Web uygulaması, HTTP isteğin başlığını kontrol ederek web tarayıcının çerezleri destekleyip desteklemediği bilgisine ulaşır. Çerezler devre dışı bırakılmış ise web uygulaması oturum bilgilerini saklamak için form gizli alanlarını kullanır. HTTP isteği ile veri alındıktan sonra web uygulaması, kullanıcının işleme devam edebilmesi için yeni bir HTML form oluşturur ve tüm oturum verileri bu formda gizli alanların içinde depolanır. Kullanıcı formu tekrar gönderdiğinde kullanıcının yeni formda doldurduğu alanlar ile birlikte gizli alanlarda saklı tüm bilgiler web uygulamasına geri gönderilmiş olur.

Sorgu dizisi (query string): Bazı durumlarda küçük miktardaki oturum verisini saklamak için sorgu dizisi de kullanılabilmektedir. Kısa uzunluktaki oturum numaralarını saklamak için uygundur.

Web tarayıcıları, HTML ve ilişkili içerikleri web sunucusundan cevap olarak aldıktan sonra işlenmek (render) üzere tarayıcının sayfa düzeni motoruna (layout engine) iletir. Sayfa düzeni motorları, içerik ve biçimlendirme bilgilerini ekran veya yazılı çıktılarda kullanılmak üzere birleştiren yazılım bileşenleridir.