Mobil aygıtımda bir Java ME uygulaması kullanarak Tomcat Sunucusuna iletişim yapıyorum.
Ağ üzerinden gönderilen bayt sayısını azaltmak için Gzip kullanarak istekleri/yanıtlarımı sıkıştırabilir miyim diye merak ediyordum.GZIP kullanarak HTTP İsteklerini sıkıştırabilir miyim?
cevap
Modern telefonların çok fazla işlemci gücü vardır ve ağ nispeten yavaştır, bu nedenle sıkıştırma mükemmel bir anlam ifade eder. Ayrıca yapmak da oldukça kolay. J2ME tarafında
, böyle bir şey yapmakhttp://www.tinyline.com/utils/index.html
,
hc.setRequestProperty("Accept-Encoding", "gzip, deflate");
if (hc.getResponseCode() == HttpConnection.HTTP_OK) {
InputStream in = hc.openInputStream();
if ("gzip".equals(hc.getEncoding()))
in = new GZIPInputStream(in);
...
Biz TinyLine'da gelen GZIPInputStream kullanın ama başkaları da vardır eminim, (siz httpconnection kullanmak varsayarak) Sunucu tarafında, hepsi yerleşik. Aşağıdaki öznitelikleri, Bağlayıcıya Tomcat üzerinde server.xml içinde ekleyin:
<Connector
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,application/json"
... />
Sunucu tarafında, here numaralı açıklandığı gibi etkinleştirebilirsiniz, ancak mobil uygulamanın,gibi gzip'i açabilen bir kitaplığa ihtiyacı olacaktır. Çalışmak için biraz işe yarayabilir ...
Tomcat'i kullandığınızdan, Tomcat sunucusunun önüne bir Apache HTTP Sunucusu örneği koyma olasılığını göz önünde bulundurun.
Bu, Apache HTTP Sunucusu için mod_jk modülü kullanılarak yapılabilir. Bunu yaptıktan sonra Apache'de mod_gzip/mod_deflate'u kullanabilirsiniz.
Elbette, müracaatçınız bunun çalışması için sıkıştırılmış yanıtları işleme yeteneğine sahip olmalıdır. İstemcinizi sıkıştırılmış yanıtlarla çalışmaya zorlarsanız, istemci düz metin yanıtlarını beklediği için genellikle anlamsız görünür. İstemcinin Kabul-Kodlama başlıklarında, müşterinin sıkıştırılmış yanıtları işleme yeteneğinin kesin göstergesini bulacaksınız.
Bu, Apache HTTP Sunucusu'nun ağda tanıtılmasını önlemek istiyorsanız, bir Servlet veya bir ZipOutputStream veya GZipOutputStream yazan bir sunucu filtresi kullanarak programlanabilir. how to do this at the OReilly OnJava.com site'da bazı işaretçiler bulacaksınız.
Apache'yi eklemeden Tomcat'ta gzip sıkıştırması yapabilirsiniz. HTTP bağlayıcısının sıkıştırma özelliğine bakın: http://tomcat.apache.org/tomcat-5.5-doc/config/http.html –
Evet, biliyorum, ancak sıkıştırmanın HTTP Sunucusu'nda yapılmasının bir nedeni var. Uygulama sunucusuna karşı - sunucu yükünün dağıtımı. Uygulama sunucusu, uygulama mantığının çalıştırılması olağan görevinden ayrı olarak yanıt sıkıştırmasıyla yüklenmesini istemez. Ayrıca, Apache HTTP sunucusunun Tomcat'den çok daha iyi performans özellikleri vardır. –
Bir HTTP isteğinin veya yanıtının içeriğini, ancak üstbilgileri sıkıştırabilirsiniz. HTTP 1.1 özelliklerinin 3.6 bölümüne ve İçerik Kodlama üstbilgisini açıklayan sonraki bölüme bakın.
DÜZENLEME: Bunun ters yüz tarafı, bir HTTP sunucu tarafının belirli bir sıkıştırma biçimini kabul edeceğinin bir garantisi olmamasıdır. HTTP'nin sunucu tarafı uygulamasının kalitesine bağlı olarak, istek içeriğinin sıkıştırıldığını bile algılayamayabilir. Yani, sunucu tarafının sıkıştırılmış istek içeriğini desteklediğini bilmiyorsanız bunu yapmak istemezsiniz.
Stephen C'nin söylediği gibi, bu sadece verileri veya HTTP başlıklarını sıkıştıracak mı? –
@Kevin, bu başlıkları sıkıştırmayacak. Üstbilgiler sıkıştırılacaksa, istemci nasıl sıkıştırıldığını nasıl belirler - GZIP yalnızca bir sıkıştırma yöntemidir. –
@Kevin. Bu doğru. Başlıklar, standartlara dayalı HTTP kullanılarak sıkıştırılamaz. –