Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 11671|Yanıt: 1

Http protokolünün İçerik Boyu

[Bağlantıyı kopyala]
2019-9-24 16:43:20 tarihinde yayınlandı | | | |
önsöz

HTTP protokolü, basit görünse de internetteki en önemli protokollerden biridir ancak pratikte sık sık sorunlarla karşılaşır ve biz de birkaç kez karşılaştık. Uzun bağlantılar ve paket ayrıştırma var. HTTP protokolü hakkında hiçbir şey bilemezsiniz, onu iyice anlamanız gerekir. Bu seriyi HTTP protokolünün sorunlarını ve deneyimlerini paylaşmak için yazdım.



HTTP protokolünde hem istek hem de yanıt paketleri için bir başlık ve gövde bulunur ve gövde, elde etmek istediğiniz kaynaktır; örneğin html sayfası, jpeg görüntüsü ve başlık belirli düzenlemeleri oluşturmak için kullanılır. Örneğin, istemci ve sunucu bazı iletim formatları üzerinde anlaşır ve istemci önce başlığı alır, biraz format bilgisini bilir ve sonra gövdeyi okumaya başlar.

İstemci: Accept-Encoding:gzip (benim için sıkıştır, trafik kullanıyorum, önce indir ve sonra yavaşça aç)

Sunucu 1: İçerik Kodlama: null (İçerik Kodlama Başlığı Yok.) Sıkıştırma vermiyorum, CPU ücretsiz değil, ister misin)

Sunucu 2: İçerik Kodlama:gzip (sizin için trafik kaydeder, sıkıştırır)
İstemci: Bağlantı: Keep alive (Büyük kardeşim, sonunda bir TCP bağlantısı kurduk, bir dahaki sefere kullanacağız)

Sunucu 1: Bağlantı: canlı kalın (kolay değil, kullanmaya devam et)

Sunucu 2: Bağlantı: kapalı (Sizinle birlikte kullanmaya devam eden herkes, TCP'miz tek seferlikdir ve bir dahaki bulduğumuzda yeniden bağlanmamız gerekecek)
HTTP protokolünde üç el sıkışma yoktur ve bir istemci sunucudan kaynak talep ettiğinde, sunucu tarafı üstünlük sağlar. Bazı başlıklarda pazarlık süreci olmayan, ancak sunucu doğrudan istemciye ne yapacağını söylüyor. Örneğin, yukarıdaki İçerik Uzunluğu, sunucunun istemciye gövdenin ne kadar büyük olduğunu söylediği miktardır. Ama! Sunucu size vücudun tam olarak ne kadar büyük olduğunu önceden söyleyemeyebilir. Sunucu önce başlığı, sonra gövdeyi yazmalıdır, eğer başlığa gövde durumu yazmak istiyorsanız, gövde boyutunu önceden bilmeniz gerekir. Gövde dinamik olarak oluşturulursa, sunucu başlığı bitirir ve başlığı yazmaya başlar; bu da çok fazla ek yük gerektirir, bu yüzden başlıkta içerik uzunluğu olmayabilir.

Peki müşteri vücudun boyutunu nasıl biliyor? Sunucu size üç şekilde anlatıyor.


1. Sunucu kaynak boyutunu zaten biliyor ve içerik uzunluğu başlığı üzerinden size haber verir.

Content-Length:1076(body的大小是1076B,你读取1076B就可以完成任务了)

Transfer-Encoding: null


2. Sunucu, kaynağın boyutunu önceden bilemez veya kaynağın boyutunu önceden hesaplamak için kaynak harcamak istemez, bu yüzden http yanıt mesajına Transfer-Encoding:chunked adlı bir başlık ekler; bu da blok transferi anlamına gelir. Her blok, önündeki blok boyutu, arkasındaki veri ve ardından 0 boyutlu son blok olan sabit bir format kullanır. Bu şekilde, istemci ayrıştırırken bazı gereksiz alanları kaldırmaya dikkat etmelidir.

Content-Length:null

Transfer-Encoding:chunked (接下来的body我要一块一块的传,每一块开始是这一块的大小,等我传到大小为0的块时,就没了)


3. Sunucu kaynağın boyutunu bilmez ve parçalanmış iletim modunu desteklemez, bu nedenle ne içerik uzunluğu başlığı ne de transfer-kodlama başlığı vardır. Bu anda, sunucu tarafından geri gönderilen başlık yakın olmalıdır.

Content-Length:null

Transfer-Encoding:null

Connection:close(我不知道大小,我也用不了chunked,啥时候我关了tcp连接,就说明传输结束了)





Önceki:HTTP protokolünde İçerik Uzunluğu'nun ayrıntılı yorumu
Önümüzdeki:HTTP protokolü Transfer-Kodlama (parçalı)
2019-9-24 17:16:57 tarihinde yayınlandı |
Teşekkürler, ev sahibi
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com