- Konu sahibi
- #1
HTTP/1.1, web tarayıcısı ile web sunucusunun kaynak istemek ve yanıt vermek için kullandığı, istek-cevap mantığıyla çalışan bir uygulama katmanı protokolüdür. Tarayıcı bir HTTP isteği gönderir; sunucu durum kodu, başlıklar ve gerekiyorsa içerikten oluşan bir yanıt döndürür. HTTPS kullanıldığında HTTP/1.1 trafiği ayrıca TLS ile şifrelenir.
Bir istemci önce sunucuya bağlantı açar, ardından isteğin yöntemini, hedef yolunu ve protokol sürümünü gönderir. HTTP/1.1'de
Örnek bir HTTP/1.1 isteği şöyledir:
Buna karşılık sunucu örneğin şöyle yanıt verebilir:
Başlık bölümünden sonraki boş satır başlıkların bittiğini gösterir; her istekte veya yanıtta gövde bulunmaz. Örnekteki yanıtın Hello, world! gövdesi 13 bayttır; sondan ayrıca satır sonu eklenirse uzunluk da değişmelidir.
HTTP/1.1 istek satırı ve başlıkları okunabilir bir metin sözdizimine sahiptir; gövde ikili bir dosya da olabilir.
Buna karşılık aynı bağlantıda kaynakların sırayla işlenmesi, öndeki yavaş bir isteğin sonraki istekleri bekletmesine yol açabilir. Buna baş çizgisi engellemesi denir. Çok sayıda CSS, JavaScript, görsel veya yazı tipi isteği olan sayfalarda bağlantı yönetimi bu nedenle önem kazanır. HTTP/2 ve HTTP/3 bu sorunun bazı yönlerini farklı aktarım teknikleriyle ele alır; ancak bir istemci ile sunucunun hangi sürümü kullanacağı yapılandırmaya ve anlaşmaya bağlıdır.
Aşağıdaki özet, yönetim kararı verirken protokolün etkisini ayırmaya yardımcı olur:
Bir alan adının hangi sürümle yanıt verdiğini kontrol etmek için HTTP/1.1'i özellikle talep eden bir istemci kullanabilirsiniz:
Bu test yalnızca belirli bir HTTP/1.1 isteğinin sonucunu gösterir; tüm kullanıcıların aynı protokolü kullanacağını garanti etmez. Ters vekil, CDN veya yük dengeleyici varsa görülen yanıt, arka uç uygulamasından önce bu katman tarafından üretilebilir. Sorun performanssa sonraki adım, tarayıcı geliştirici araçlarında kaynakların bekleme sürelerini ve sunucu günlüklerinde durum kodlarını birlikte karşılaştırmaktır.
Nasıl çalışır?
Bir istemci önce sunucuya bağlantı açar, ardından isteğin yöntemini, hedef yolunu ve protokol sürümünü gönderir. HTTP/1.1'de
Host başlığı zorunludur; aynı IP adresinde birden fazla alan adının barındırılabilmesini sağlar. Sunucu yanıtında genellikle şu bilgiler bulunur:- Durum satırı: İsteğin sonucunu belirtir; örneğin
200 OKbaşarılı bir yanıtı,404 Not Foundbulunamayan kaynağı ifade eder. - Başlıklar: İçeriğin türü, boyutu, önbellek davranışı ve bağlantı özellikleri gibi metaverileri taşır.
- Gövde: HTML, CSS, JSON, görsel veya başka bir kaynak olabilir; bazı yanıtlar gövde içermez.
Örnek bir HTTP/1.1 isteği şöyledir:
Kod:
GET /index.html HTTP/1.1
Host: example.com
Connection: close
Buna karşılık sunucu örneğin şöyle yanıt verebilir:
Kod:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 13
Connection: close
Hello, world!
Başlık bölümünden sonraki boş satır başlıkların bittiğini gösterir; her istekte veya yanıtta gövde bulunmaz. Örnekteki yanıtın Hello, world! gövdesi 13 bayttır; sondan ayrıca satır sonu eklenirse uzunluk da değişmelidir.
Connection: close kullanıldığında sunucu yanıtı tamamladıktan sonra bağlantıyı kapatır. Aksi durumda HTTP/1.1'in kalıcı bağlantı davranışı sayesinde aynı TCP bağlantısı yeni isteklerde yeniden kullanılabilir.HTTP/1.1'in temel özellikleri ve sınırları
HTTP/1.1 istek satırı ve başlıkları okunabilir bir metin sözdizimine sahiptir; gövde ikili bir dosya da olabilir.
Host başlığı, kalıcı bağlantılar, önbellek kontrolü, aralık istekleri ve parçalı aktarım gibi mekanizmalar web sunucusu işletimini kolaylaştırır. Yanıtın boyutu baştan bilinmiyorsa sunucu Transfer-Encoding: chunked ile içeriği parçalar halinde gönderebilir.Buna karşılık aynı bağlantıda kaynakların sırayla işlenmesi, öndeki yavaş bir isteğin sonraki istekleri bekletmesine yol açabilir. Buna baş çizgisi engellemesi denir. Çok sayıda CSS, JavaScript, görsel veya yazı tipi isteği olan sayfalarda bağlantı yönetimi bu nedenle önem kazanır. HTTP/2 ve HTTP/3 bu sorunun bazı yönlerini farklı aktarım teknikleriyle ele alır; ancak bir istemci ile sunucunun hangi sürümü kullanacağı yapılandırmaya ve anlaşmaya bağlıdır.
Aşağıdaki özet, yönetim kararı verirken protokolün etkisini ayırmaya yardımcı olur:
| Konu | HTTP/1.1'deki yaklaşım | Yönetim açısından anlamı |
|---|---|---|
| İletişim modeli | İstek ve yanıt | Her kaynağın isteği ve yanıtı ayrı izlenir |
| Bağlantı | Yeniden kullanılabilir | Bağlantıyı her istekte kapatmak ek maliyet oluşturabilir |
| Mesaj biçimi | Metin tabanlı başlıklar ve gövde | Elle incelenmesi ve hata ayıklaması kolaydır |
| Eşzamanlılık | Aynı bağlantıda sınırlıdır | Çok kaynaklı sayfalarda gecikme görülebilir |
Sunucuda gerçekten HTTP/1.1 kullanılıyor mu?
Bir alan adının hangi sürümle yanıt verdiğini kontrol etmek için HTTP/1.1'i özellikle talep eden bir istemci kullanabilirsiniz:
- Sunucuya erişilebilen bir makinede
curl --http1.1 -i https://example.com/komutunu çalıştırın.-iyanıt başlıklarını da gösterir. - Hedef yanıtının durum satırında
HTTP/1.1görülmesini ve ardından bir durum kodu gelmesini bekleyin. - Başlıkları inceleyerek yönlendirme, içerik türü, sıkıştırma ve bağlantı davranışını değerlendirin.
301veya302görürseniz ilk adres başka bir adrese yönlendiriliyordur; bu tek başına sunucunun başarısız olduğu anlamına gelmez. - Bağlantı kurulamazsa DNS, TLS sertifikası, güvenlik duvarı veya sunucunun dinlediği portu ayrı ayrı kontrol edin.
4xxyanıtı istemci isteği ya da yetkilendirme sorununa,5xxyanıtı ise genellikle sunucu tarafındaki işleme sorununa işaret eder.
Bu test yalnızca belirli bir HTTP/1.1 isteğinin sonucunu gösterir; tüm kullanıcıların aynı protokolü kullanacağını garanti etmez. Ters vekil, CDN veya yük dengeleyici varsa görülen yanıt, arka uç uygulamasından önce bu katman tarafından üretilebilir. Sorun performanssa sonraki adım, tarayıcı geliştirici araçlarında kaynakların bekleme sürelerini ve sunucu günlüklerinde durum kodlarını birlikte karşılaştırmaktır.