it-swarm-tr.com

İstekler için http sıkıştırmayı etkinleştirmek mümkün mü?

Sunucu yanıtları için http sıkıştırmasını etkinleştirme hakkında çok fazla bilgi görüyorum, ancak gelen istekler için ne var. Tarayıcıların büyük form yayınlarını sunucuya göndermeden önce sıkıştırmaları anlamlı olmaz mıydı?

Başka bir örnek, kullandığımız bir REST web hizmetidir. Büyük XML dosyaları (10+ MB) ile sık sık PUT istekleri göndermek zorundayız ve her iki tarafta da bazı bant genişliği/hız avantajları göreceğiz.

Yani bu sunucu tarafında çözülmüş bir problem mi, yoksa her web uygulamasının ayrı ayrı ele alması gerekiyor mu?

35
Mike L

Sıkıştırılmış sunucuya PUT verisi için istek gövdesini sıkıştırmalı ve Content-Encoding: gzip Üstbilgisini ayarlamalısınız. Başlığın kendisi sıkıştırılmamış olmalıdır. mod_deflate içinde belgelenmiştir:

Mod_deflate modülü ayrıca bir gzip sıkıştırılmış istek gövdesinin sıkıştırmasını açmak için bir filtre sağlar. Bu özelliği etkinleştirmek için SetInputFilter veya AddInputFilter kullanarak DEFLATE filtresini giriş filtresi zincirine eklemeniz gerekir.

...

Şimdi bir istek Content-Encoding: gzip üstbilgisi içeriyorsa, gövde otomatik olarak açılır. Birkaç tarayıcı istek gövdelerini gzipleme yeteneğine sahiptir. Ancak, bazı özel uygulamalar aslında bazı WebDAV istemcileri gibi istek sıkıştırmayı destekler.

Ve bunu anlatan bir makale burada :

Peki nasıl yapıyorsun? Mod_deflate kaynak kodundan yine bir bulanıklık: sadece ana istek üzerinde çalışın/alt talep yok. Bu, bunu kullanmayı seçersek, isteğin tüm gövdesinin gzip sıkıştırılmış olması gerektiği anlamına gelir, örneğin çok parçalı bir istekte yalnızca dosyayı içeren parçayı sıkıştırmak mümkün değildir.

Ayrı olarak, bir tarayıcı Accept-Encoding Üstbilgisini burada olarak ayarlayarak sunucu yanıt içeriğinin sıkıştırılmasını isteyebilir.

GET /index.html HTTP/1.1
Host: www.http-compression.com
Accept-Encoding: gzip
User-Agent: Firefox/1.0

Bu, sıkıştırılmış verileri tarayıcıya döndürür.

30
Andy

Yanıtlar değil, sıkıştırılmış istekler hakkındaki parçayı yanıtlamak: evet, yaygın kullanımda görünmese bile mümkündür. İstemci tarafı uygulamasının uygun içerik kodlama başlığını ayarlaması gerekir. Sunucu tarafı uygulamasına gelince, 2 seçenek vardır:

  1. uygulama, istek gövdesinin tek başına yeniden şişirilmesini destekler. Bunu yapabilen örnek bir kitaplık phpxmlrpc olanıdır.

  2. web sunucusu yanıt gövdesini uygulamaya geçirmeden önce şişirir. Bu, örn. Apache'nin mod_deflate filtresi ve inputFilter ayarı

4
gggeek

Yerel olarak bildiğim herhangi bir tarayıcıdan değil, sizin için yapacak bir eklenti bulmanız gerekir. Temel olarak, içeriği kodlayan HTTP üstbilgisini, sunucunun isteğin nasıl geldiğini bilmesini sağlamak için ayarlamanız gerekir. Elbette sunucunun bu kodlamayı işleyebilmesi gerekir.

2
squillman

Buna izin verilmiyor. HTTP spesifikasyonuna göre ( RFC 2616 ), Content-Encoding olası istek başlığı alanlarından biri DEĞİLDİR, bu nedenle sunucuya bunun gerçekleştiğini bildirmenin yasal bir yolu olmadığından istek varlığı gövdesini sıkıştırmak mümkün değildir. İstek gövdesinin herhangi bir sıkıştırması yalnızca standart olmayan bir uzantı olarak yapılır.

0
Steve