Mesajlar, temsiller ve dosyalar
Content-Length, compression ve framing
Byte sayısı ile karakter sayısı aynı değildir.
Kavramı anlayalım
Content-Length taşınan gövdenin byte uzunluğunu belirtir. UTF-8’de bir karakter birden fazla byte olabilir. Content-Encoding gzip/br gövdeye uygulanan dönüşümü anlatır; Content-Type içerik türüdür. Sıkıştırılmış transferin uzunluğu açılmış metin uzunluğuyla aynı değildir.
HTTP/1.1 chunked transfer gövdeyi parçalara ayırarak son uzunluk bilinmeden aktarabilir. HTTP/2/3 kendi framing mekanizmalarını kullanır; Transfer-Encoding: chunked doğrudan taşınmaz. Proxy katmanları mesaj sınırlarını aynı yorumlamalıdır. Çelişkili Content-Length/Transfer-Encoding girdileri güvenlik ve ayrıştırma sorunu yaratır; standart server/proxy’lerin doğrulamasını kullan.
Sıkıştırma CPU ile bant genişliği arasında dengedir. Küçük yanıtların kazancı sınırlı olabilir; JPEG gibi zaten sıkıştırılmış verilerde tekrar compression gereksiz olabilir. Secret ve kullanıcı kontrollü veriyi birlikte sıkıştırmanın yan kanal riskleri bulunduğunu bil; yalnız payload küçüldü diye güvenlik sonucu çıkarma.
Eksik body, yanlış boyut ve proxy sorunlarını anlamak için.
String.length’i her zaman Content-Length sanmak.
Aynı konu. Üç farklı derinlik.
Content-Type: text/plain; charset=utf-8UTF-8 byte uzunluğunu ayrıca düşün.
Bu sayfa dış sunuculara istek göndermez. HTTP mesajları temsili, HTTP/1.1 biçiminde okunabilir gösterimlerdir; HTTP/2 ve HTTP/3 wire formatı değildir. example.test ayrılmış öğretim alan adıdır. Komut ve JavaScript örneklerini yalnız kendi test ortamında uygula; gerçek token veya cookie yayımlama.
Önce kendin dene.
Bir gzip yanıtında decoded body uzunluğu Content-Length’e eşit olmak zorunda mı?
Çözümü ve açıklamasını göster
Transferred bytes ≠ decoded bytesHayır; transfer ve açılmış temsil farklı ölçülerdir.