Bir web sitesini ziyaret ettiğinizde, tarayıcınız arka planda sunucuya düzinelerce veya yüzlerce istekte bulunur. Sunucu bu isteklere, sitenin yüklemesi gereken tüm veri ve dosyaları göndererek yanıt verir. Ancak gerçek süreç bundan daha karmaşıktır.
Web sitenizin performansını artırmak istiyorsanız HTTP isteklerinin nasıl çalıştığını anlamak çok önemlidir. Bu optimizasyon önlemlerinden bazıları istekleri en aza indirmeyi ve sıkıştırmayı içerir. Esasen, sunucunuzu HTTP isteklerine daha iyi yanıt verecek şekilde optimize ediyorsunuz.
Bu makalede, HTTP isteklerinin nasıl çalıştığına daha yakından bakacağız. Ayrıca HTTP isteklerinin yapısını ve gerektiğinde nasıl sorun giderileceğini göstereceğiz. Hadi işe koyulalım!
İçindekiler:
HTTP Nedir?
HTTP bir protokoldür. Aslında HyperText Transfer Protocol (Köprü Metni Aktarım Protokolü) anlamına gelir ve kısaltmasıdır. Bu protokol, istemciler ve sunucular arasında gerçekleşen isteklerin ve yanıtların yapısını ve dilini yönetir. İstemciler genellikle web tarayıcılarıdır, ancak arama motoru robotları gibi birçok biçimde olabilirler.
Bir tarayıcı aracılığıyla web sitelerini ziyaret ettiğinizde, tüm bağlantı HTTP üzerinden gerçekleşir. Bu protokol metin, resim, video, stil sayfaları, komut dosyaları ve daha fazlası dahil olmak üzere veri almanızı sağlar.
HTTP, 90’lı yılların başından beri web’in bel kemiklerinden biri olmuştur. Son yıllarda, daha verimli hale gelmek için gelişmiştir. 2010’ların ikinci yarısı, istemcilerin kaynakları eşzamansız yerine eşzamanlı olarak yüklemesini sağlayan HTTP/2’nin geliştirilmesine tanık oldu. Bu da büyük bir performans artışıyla sonuçlandı.
Web’in yüzde 36’sı HTTP/2 kullanıyor. Şimdi, HTTP-over-QUIC olarak da bilinen HTTP/3’ün benimsenmesi konusunda tartışmalar var. HTTP/3, geleneksel TCP bağlantılarına (HTTP ve HTTP/2’nin kullandığı) göre avantaj sağlayan UDP protokolü ile çalışır.
HTTP İsteği Nedir ve Nasıl Çalışır?
Bir HTTP isteğini tarayıcınızın sunucuya bağlanması ve belirli bir kaynak istemesi ya da sunucuya veri göndermesi olarak düşünün. Sunucudan aldığınız yanıtın türünü tamamen değiştiren çeşitli HTTP istek yöntemleri vardır. En yaygın olanları şunlardır:
- GET: Açık ara en sık kullanılan HTTP istek yöntemidir. Bir GET isteği sunucudan belirli bir bilgi veya kaynak parçası ister. Bir web sitesine bağlandığınızda, tarayıcınız sayfanın yüklenmesi için ihtiyaç duyduğu verileri almak üzere genellikle birkaç GET isteği gönderir.
- HEAD: HEAD isteği ile yalnızca yüklemek istediğiniz sayfanın başlık bilgilerini alırsınız. Bu tür bir HTTP isteğini, GET kullanarak indirmeden önce bir belgenin boyutunu öğrenmek için kullanabilirsiniz.
- POST: Tarayıcınız, sunucuya veri göndermesi gerektiğinde POST HTTP istek yöntemini kullanır. Örneğin, bir web sitesinde bir iletişim formu doldurup gönderirseniz, sunucunun bu bilgileri alması için bir POST isteği kullanmış olursunuz.
- PUT: PUT istekleri işlevsellik açısından POST yöntemine benzer. Ancak, veri göndermek yerine, son sunucuda zaten var olan bilgileri güncellemek için PUT isteklerini kullanırsınız.
DELETE, PATCH ve OPTIONS yöntemleri de dahil olmak üzere kullanabileceğiniz başka HTTP istek türleri de vardır. Ancak, bunlar günlük kullanımda nispeten nadirdir.
Bir HTTP isteği göndermek, alıcı sunucuya belirli bir formatta bir mesaj göndermeyi içerir. Sunucu bir yanıt döndürür ve istemci buna göre işlem yapar. Örneğin, kaynakları yükleyebilir veya sizi başka bir sayfaya yönlendirebilir.
Bir HTTP hatası aldığınızda, bunun nedeni genellikle sunucunun isteğinizi yerine getirememesidir. Aldığınız hata kodu, nedenini açıklamaktadır. HTTP hatalarının en yaygın nedenlerinden sunucuya bağlanamamak ve talep edilen kaynakları bulamamaktır.
Herhangi bir sayfanın durumunu incelemek için HTTP Header Checker onlien araçlarını deneyebilirsiniz.
HTTP İstek ve Yanıt Yapılarına Giriş
HTTP Request’leri ve yanıtları benzer yapıları paylaşır. Sitenizdeki olası hataları anlamak için HTTP isteklerini ve yanıtlarını analiz etmek istiyorsanız, bu yapıları anlamanız önemlidir.
Genel olarak HTTP istekleri 3 bölümde incelenir. Şimdi her birine yakından bakalım.
HTTP İstek Satırı
Her HTTP isteği, ne tür bir yöntem kullandığınızı ve HTTP protokolünün sürümünü belirten bir satırla başlar. Örneğin, bir HTTP GET isteğinin başlangıcı aşağıdaki gibi olabilir:
GET /XXX HTTP/1.1
Bu durumda, GET yönteminden sonra gelen “XXX” paremetresi almak istediğiniz dosyayı belirtir.
Bir HTTP yanıtının başlangıcı, her iki tarafın da kullandığı protokolün sürümünü tekrarlar. Ayrıca yanıtın durumuna karşılık gelen bir HTTP kodu da içerir.
Bir web sitesini ziyaret ederseniz ve başarıyla yüklenirse, 2XX HTTP başarı mesajı görürsünüz:
HTTP/1.1 200 OK
HTTP yanıtının bu bölümü, kaynak herhangi bir nedenle yüklenemezse hata kodlarını görüntüler. Sunucu sayfayı bulamazsa, buna benzer bir yanıt başlığı görürsünüz:
HTTP/1.1 400 OK
İstek yöntemlerini ve HTTP durum kodlarını anlıyorsanız, başlangıç satırı size istemci ile sunucu arasında tam olarak ne tür bir işlemin gerçekleştiğini söyler. Genel olarak bu, isteğin anlaşılması gereken en basit kısmıdır.
İstek Üstbilgileri
İstek başlıkları istek satırlarından hemen sonra gelir ve işlem hakkında ek bilgi sağlar. Başlık, ana bilgisayar, son istemcinin kullandığı web sunucusu yazılımı, istemcinin kullanıcı aracısının ne olduğu ve daha fazlası hakkında bilgi belirtir.
İşte bir HTTP istek başlığı böyle görünür:
Ana bilgisayar: website.com
User-Agent: Chrome/5.0 (Windows 10)
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Connection: keep-alive</code.
Bazı örnekleri HTTP başlık parametreleri burada bulabilirsiniz. İşte bu başlıktaki her satırın ne anlama geldiği:
- Ev sahibi: Bu, istekte bulunduğunuz sunucunun IP’si veya URL’sidir.
- User-agent: Bu parametre istemci ve İşletim Sistemi (OS) hakkında bilgi içerir. Tipik olarak bu, kullandığınız tarayıcıyı ve sürümünü ana hatlarıyla belirtir.
- Accept-language: Bu satır sunucuya, talep ettiğiniz dosyanın birden fazla sürümü olması durumunda istemcinin hangi dili tercih ettiğini bildirir.
- Accept-encoding: Bu satır, istemcinin işleyebileceği kodlama veya sıkıştırma türünü gösterir.
- Connection: Bu parametre sunucuya bağlantıyı canlı tutup tutmayacağını veya bunun için bir zaman aşımı ayarlayıp ayarlamayacağını söyler. İstek tamamlanmadan önce bağlantı zaman aşımına uğrarsa, bir hata alırsınız.
Kullanmanız gereken genel yapı hakkında bir fikir edinmek için istek satırını ve başlıkları bir araya getirelim:
GET /XXX HTTP/1.1
Ana bilgisayar: website.com
Kullanıcı-Agent: Chrome/5.0 (Windows 10)
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Connection: keep-alive
Yukarıdaki örnekte, belirli bir kaynak için website.com ana bilgisayarına bir GET isteği gönderiyorsunuz. Şimdi, yanıttaki başlığın nasıl görünebileceğini görelim:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2022 12:28:53 GMT
Sunucu: Apache/2.2.14 (Win32)
Last Modified: Wed, 22 Jul 2022 19:15:56 GMT
Content-Lenght: 88
Content-Type: text/html
Connection: Close
Yanıt başlığı ikinci satırdan başlar ve bağlantı tarihi ile ana bilgisayarın hangi web sunucusunu ve işletim sistemini kullandığı hakkında bilgi içerir. Bir dosya talep ediyorsanız, başlık ayrıca son değişiklik tarihi, dosyanın ne kadar uzun olduğu ve ne tür bir içerikle uğraştığınız hakkında bilgi gösterecektir. Son satır, istek tamamlandığı için bağlantının kapatıldığını söyler.
Başlıklardaki bilgiler ve parametreler ne tür bir istek yaptığınıza bağlı olarak değişebilir. Ancak, genel yapı aynı kalır.
HTTP Mesaj Gövdesi
Mesaj gövdesi, bir HTTP isteğinin en basit kısmıdır. Bu, hangi istek yöntemini kullandığınıza bağlı olarak gönderdiğiniz veya aldığınız verileri içerir.
GET yöntemini kullanarak bir HTML dosyası talep ederseniz, aşağıdaki gibi yapılandırılmış bir yanıt alabilirsiniz:
HTTP/1.1 200 TAMAM
Tarih Mon, 27 Jul 2022 12:28:53 GMT
Sunucu Apache/2.2.14 (Win32)
Last Modified: Wed, 22 Jul 2022 19:15:56 GMT
Content-lenght: 88
Content-type: text/html
Connection: Kapalı
Dosyanın geri kalanı buraya gider
Bir HTTP isteğinin veya yanıtının gövdesi, tek bir boş satır kullanılarak başlıktan ayrılır. Karışıklığı önlemek için yukarıdaki örneğe tam bir HTML dosyası dahil etmedik.
HTTP İstekleri Nasıl İzlenir ve Sorun Giderilir?
Özet
HTTP isteklerinin ne olduğunu ve nasıl çalıştıklarını anlamak web sitenizdeki sorunları gidermenize yardımcı olabilir. HTTP hatalarıyla karşılaştığınızda, bu, sunucunun istemcinin yaptığı isteği yerine getiremediği anlamına gelir. Bu isteğin ne olduğunu biliyorsanız ve HTTP yanıtındaki hata kodunu anlıyorsanız, sorunu çözmek için fazlasıyla bilgiye sahipsiniz demektir.
Bir HTTP isteğini anlamak için hangi yöntemleri kullanabileceğini bilmeniz gerekir. Ayrıca, HTTP isteklerinin ve yanıtlarının nasıl yapılandırıldığını bilmeniz ve farklı HTTP durum kodlarını anlamanız gerekir.