it-swarm-ru.tech

Можно ли включить http-сжатие для запросов?

Я вижу много информации о включении сжатия HTTP для ответов сервера, но как насчет входящих запросов. Разве для браузеров не имеет смысла сжимать большие сообщения в форме перед отправкой на сервер?

Другим примером является веб-служба REST), которую мы используем. Мы должны отправлять частые запросы PUT с большими файлами XML (10+ МБ) и определенно увидим некоторые преимущества пропускной способности/скорости с обеих сторон.

Так это решаемая проблема на стороне сервера или каждое веб-приложение должно обрабатывать ее индивидуально?

35
Mike L

Чтобы PUT данные на сжатый сервер, вы должны сжать тело запроса и установить Content-Encoding: gzip заголовок. Сам заголовок должен быть несжатым. Это задокументировано в mod_deflate :

Модуль mod_deflate также предоставляет фильтр для распаковки тела сжатого gzip запроса. Чтобы активировать эту функцию, вы должны вставить фильтр DEFLATE в цепочку входных фильтров, используя SetInputFilter или AddInputFilter.

...

Теперь, если запрос содержит заголовок Content-Encoding: gzip, тело будет автоматически распаковано. Немногие браузеры имеют возможность gzip тела запросов. Однако некоторые специальные приложения на самом деле поддерживают сжатие запросов, например некоторые клиенты WebDAV.

И статья, описывающая это здесь :

Так как вы это делаете? Вот реклама, опять же из исходного кода mod_deflate: работа только по основному запросу/без подзапросов. Это означает, что все тело запроса должно быть сжато gzip, если мы решили использовать это, невозможно сжать только часть, содержащую файл, например, в составном запросе.

Отдельно браузер может запросить сжатие содержимого ответа сервера, установив Accept-Encoding заголовок согласно здесь :

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

Это вернет сжатые данные в браузер.

30
Andy

Отвечая на часть о сжатых запросах, а не ответах: да, это возможно, даже если это не кажется широко распространенным. Клиентскому приложению необходимо установить соответствующий заголовок кодировки содержимого. Что касается серверного приложения, есть 2 варианта:

  1. приложение поддерживает повторную разгрузку тела запроса самостоятельно. Библиотека примеров, которая может сделать это, является phpxmlrpc.

  2. веб-сервер раздувает тело ответа перед передачей его в приложение. Это возможно, используя f.e. фильтр mod_deflate Apache и настройка inputFilter

4
gggeek

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

2
squillman

Это НЕ разрешено. Согласно спецификации HTTP ( RFC 2616 ), Content-Encoding НЕ является одним из возможных полей заголовка запроса, поэтому сжатие тела объекта запроса невозможно, поскольку нет законного способа сообщить серверу, что это произошло. Любое сжатие тела запроса выполняется только как нестандартное расширение.

0
Steve