Я могу сжать Запросы HTTP с помощью GZIP?

Странно, что никто не упомянул LINQBridge. Этот небольшой потрясающий проект является бэкпортом LINQ (IEnumerable, но без IQueryable) и его зависимости (Func, Действие, и т.д.) к.NET 2.0. И:

, Если Ваши ссылки проекта LINQBridge во время компиляции, то это свяжет с операторами запроса LINQBRIDGE; если это ссылается на Систему. Ядро во время компиляции, тогда это свяжет с Платформой 3.5's операторы запроса.

16
задан Kevin Boyd 20 September 2009 в 02:47
поделиться

4 ответа

Современные телефоны имеют это большая мощность процессора и сеть относительно медленная, поэтому сжатие имеет смысл. Это также довольно легко сделать.

На стороне J2ME вы делаете что-то вроде этого (при условии, что вы используете HttpConnection),

  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);
  ...

Мы используем GZIPInputStream из tinyline, но я уверен, что есть и другие,

http: // www.tinyline.com/utils/index.html

На стороне сервера все встроено. Просто добавьте следующие атрибуты к коннектору в server.xml на Tomcat,

<Connector 
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,application/json"
... />
18
ответ дан 30 November 2019 в 21:37
поделиться

Вы можете сжимать содержимое HTTP-запроса или ответа, но не заголовки. См. Раздел 3.6 спецификации HTTP 1.1 и последующий раздел, описывающий заголовок Content-Encoding.

РЕДАКТИРОВАТЬ: Обратной стороной этого является то, что нет гарантии, что сторона HTTP-сервера примет какой-либо конкретный формат сжатия. И в зависимости от качества реализации HTTP на стороне сервера, он может даже не распознать, что содержимое запроса было сжато. Поэтому вам не стоит этого делать, если вы не знаете, что серверная сторона поддерживает сжатое содержимое запроса.

4
ответ дан 30 November 2019 в 21:37
поделиться

Поскольку вы используете Tomcat, рассмотрите возможность размещения экземпляра HTTP-сервера Apache перед сервером Tomcat.

Это можно сделать с помощью mod_jk модуль для HTTP-сервера Apache. Как только вы это сделаете, вы можете использовать mod_gzip / mod_deflate в Apache.

Конечно, ваш клиент должен иметь возможность обрабатывать сжатые ответы, чтобы это работало. Если вы заставите своего клиента работать со сжатыми ответами, он в конечном итоге будет отображать тарабарщину, поскольку (обычно) ожидал ответов в виде простого текста. Вы найдете определенный индикатор способности клиента обрабатывать сжатые ответы в заголовках клиента Accept-Encoding.

Это можно сделать программно, используя сервлет или фильтр сервлетов, который записывает в ZipOutputStream или GZipOutputStream, если вы хотите избежать появления HTTP-сервера Apache в сети. Вы найдете несколько указателей на , как это сделать, на сайте OReilly OnJava.com .

2
ответ дан 30 November 2019 в 21:37
поделиться

На стороне сервера вы можете включить его, как описано здесь , но мобильному приложению потребуется библиотека, которая может распаковывать gzip, например этот . Хотя, возможно, придется немного поработать ...

1
ответ дан 30 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: