Web Nasıl Çalışır?
Bu hafta sizlerle birlikte arka uç web geliştiricisi olma yolunda güçlü bir adım atacağız. Dersimize öncelikle webin temel çalışma prensibini belirleyen HTTP protokolünü tüm detaylarıyla inceleyerek başlayalım.
Web teknolojilerinin temeli, sunucu (server) ve istemci (client) arasında gerçekleşen iletişim akışına dayanır. Bu iletişim akışı, HTTP (Hyper Text Transfer Protocol) Protokolü tarafından düzenlenir. En genel haliyle sunucu, iletişim ağları kapsamında yayın yapan bir bilgisayar olarak tanımlanabilir. İstemci ise; Chrome, Edge, Firefox ve Safari gibi web tarayıcıları başta olmak bir sunucuya bağlanmak için kullanılabilen her türlü yazılımı (mobil, masaüstü) ve donanımı (IoT) ifade eder.

Şekil 1. HTTP Döngüsü
Örneğin; favori web tarayıcınızı kullanarak https://www.google.com'a erişmek istediğinizde kullandığınız web tarayıcısı (istemci), google.com web sitesinin barındırıldığı bilgisayara (sunucu) bir HTTP isteği (request) gönderir. Sunucu, gelen isteği işleyerek istemciye bir HTTP yanıtı (response) döndürür. İstemci ve sunucu arasında gerçekleşen bu işlem dizisi; tıkladığınız her bağlantıda, yaptığınız her aramada ve doldurduğunuz her formda tekrar tekrar yinelenir (Şekil 1).
Basit bir HTTP isteği şu bilgileri içerir:
- Sunucuyu ve kaynağı tanımlayan bir URL. Örneğin; https://www.google.com
- Gerekli işlemi tanımlayan bir eylem.
- GET: Varsayılan HTTP eylemidir ve web sitesinde yer alan belirli bir kaynağı talep eder.
- POST: Yeni bir kaynak oluşturmak için kullanılır.
- HEAD: Belli bir kaynağa ait metadata bilgilerini talep etmek için kullanılır. Örneğin; bir web sayfasının en son ne zaman güncellendiğini öğrenmek için HEAD eylemini kullanabilirsiniz.
- PUT: Mevcut bir kaynağı güncellemek için kullanılır.
- DELETE: Belirtilen kaynağı silmek için kullanılır.
- Ek parametreler
- İstek URL'i ile birlikte gönderilen veriler. Örneğin; Google'da arama yaparken kullanacağımız anahtar kelimeleri göndermek için URL'nin sonuna ?q= parametresini ekleyebilirsiniz: https://www.google.com/search?q=akadema
- POST eylemi ile birlikte gönderilen veriler.
- İstemci tarafından tutulan çerez dosyalar: Web sitesinin tanımlama bilgileri, oturum açma verileri ve erişim izinleri...
Sunucunun döndürdüğü tüm HTTP yanıtları, işlem durumunu tanımlayan bir kod içerir. Örneğin; sunucu bir isteği başarıyla sonuçlandırdığında "200 OK" kodunu, istenen kaynağı bulamadığında "404 Not Found" kodunu ve istemcinin kaynağa erişim yetkisi olmadığı durumlarda ise "403 Forbidden" kodunu döndürür.
HTTP protokolü, webin yetkili ağzı olan W3 Organizasyonu tarafından bir "web standardı" (RFC7230) olarak tanımlanmıştır.
Bir HTTP İsteğinin Yapısı
İstemciden sunucuya gönderilen HTTP isteklerinin yapısını, bir örnekle açıklayarak dersimize devam edelim.
Akadema sistemi hakkında bilgi arayan bir öğrenme meraklısı olduğunuzu varsayalım. Favori internet tarayıcınızı (Chrome, Edge, Firefox veya Safari) kullanarak www.google.com websitesini açtınız. Arama çubuğuna "akadema" yazarak giriş (enter) tuşuna bastınız. Bu durumda, internet tarayıcınız (istemci) google.com'un barındırıldığı web sunucusuna Şekil 2'dekine benzer bir HTTP isteği gönderir.

Şekil 2. Bir HTTP isteğinin yapısı
Bu isteğin başlığına (header) daha yakından bakalım:
GET https://www.google.com/complete/search?q=akadema&cp=7&client=psy-ab&xssi=t&gs_ri=gws-wiz&hl=tr&authuser=0&psi=bqCpXc2nF4jQrgSb-qyQBQ.1571397742719&ei=bqCpXc2nF4jQrgSb-qyQBQ HTTP/1.1 Host: google.com Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 Accept: */* Referer: https://www.google.com/ Accept-Encoding: gzip, deflate, br Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7 Accept-Language: tr,en-US;q=0.9,en;q=0.8 Cookie: CGIC=InZ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIz; HSID=A8QISN8jBzsNwkJBY; SSID=AuFHPxYgZTHxRsh9s; APISID=wCr3cTHmTtUVmikT/AKFWwqixiv5WAJcoL; SAPISID=ZYlqBKXoHxnIiJY7/AOVINyJkbmFlloDza; SID=ogeKkLuUW1QWix-R5TJrAQjGznhTiklTcRD9hVN8VyMpq52meDBVe7SvN75-u-7L8XVmNg.; SEARCH_SAMESITE=CgQI_I0B; ANID=AHWqTUlh-W8_F4vep2vFoHrOthfaNsa7R2EoB1BqdPQguCycQ9ekD0QE0YgUYKE1; NID=189=fwhdolKXjony8Lsirvj4fZNoBZs_bFL8B6tZkrpcrk-ZUhgJcFQk6bHQlrz9jZOGvpv2LpeLvBcCRqJQOhAl_DAw5aLlbzwOm7l7wm08KCCUY6Mdg_zcn06nzSN6YSwZFxFJmlG4ewa6ynBOI2zPW-tFwPwliqs895YKUwxcg-fHBJ9AmIwc5DVu7vgFuUxlqhyk73mGp_4-Z1GYRXrIWlC8GimYro4Wq78hFhyJmdjUeItaRnlP1forjtSqP43rJ4jURUoTYH3newyvd3BkMoUDX5E6Sz9VF8BKz9Hj7E6R; 1P_JAR=2019-10-18-11; DV=A3up44AVt8VSgKbGc1tsDVAyppDp3RbRbQvsvfCOvAAAACAcuD9TMkTrMAAAAKTncTGsXm1hIwAAAHXf8WTYRpr3CAAAAA; SIDCC=AN0-TYvYNWECyfwPc1zv0zvK8PZAM8B-h5_ksLV2MCJnkRIIIkpgRqxau3BCfHzWLtiQ4OouDz9N
İlk satıra odaklandığımızda HTTP isteğine ilişkin aşağıda sıralanan pek çok bilgiye ulaşabiliriz.
- HTTP isteğinde kullanılan eylem: GET
- İsteğin gönderildiği sunucu: google.com
- Sunucudan istekte bulunulan hedef kaynak: /complete/search
- Sunucuya gönderilen parametreler: q=akadema&cp=7&client=psy-ab&xssi=t&gs_ri=gws-wiz&hl=tr&authuser=0&psi=bqCpXc2nF4jQrgSb-qyQBQ.1571397742719&ei=bqCpXc2nF4jQrgSb-qyQBQ
- Kullanılan HTTP sürümü: HTTP/1.1
- Kullanılan web tarayıcısına ait bilgiler (User-Agent): Apple Mac OS X (10.14.6) işletim sisteminde, Google Chrome (77.0.3865.120) web tarayıcısını kullanmaktadır.
Bir HTTP Yanıtının Yapısı
İnternet tarayıcınız (istemci) tarafından google.com'a gönderilen HTTP isteği, web uygulaması tarafından işlenerek arama sonuçlarının yer aldığı bir HTTP yanıtı döndürülür. Google.com tarafından döndürülen HTTP yanıtının yapısı şu şekilde olacaktır:
HTTP/1.1 200 OK
Server: gws
X-Backend-Server: google.com
Content-Type: text/html; charset=utf-8
akadema - Google'da Ara