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

<p>я вижу много информации о включении сжатия http для ответов сервера, но как насчет входящих запросов. разве для браузеров не имеет смысла сжимать большие сообщения в форме перед отправкой на сервер?</p><p>другим примером является веб-служба rest), которую мы используем. мы должны отправлять частые запросы put с большими файлами xml (10+ мб) и определенно увидим некоторые преимущества пропускной способности/скорости с обеих сторон.</p><p>так это решаемая проблема на стороне сервера или каждое веб-приложение должно обрабатывать ее индивидуально?</p>

<p>чтобы <code>put</code> данные на сжатый сервер, вы должны сжать тело запроса и установить <code>content-encoding: gzip</code> заголовок. сам заголовок должен быть несжатым. это задокументировано в <a href="http://httpd.apache.org/docs/2.2/mod/mod\_deflate.html">mod\_deflate</a> :</p><blockquote> <p>модуль mod\_deflate также предоставляет фильтр для распаковки тела сжатого gzip запроса. чтобы активировать эту функцию, вы должны вставить фильтр deflate в цепочку входных фильтров, используя setinputfilter или addinputfilter.</p> <p>...</p> <p>теперь, если запрос содержит заголовок content-encoding: gzip, тело будет автоматически распаковано. немногие браузеры имеют возможность gzip тела запросов. однако некоторые специальные приложения на самом деле поддерживают сжатие запросов, например некоторые клиенты webdav.</p> </blockquote><p>и статья, описывающая это <a href="http://hype-free.blogspot.com/2007/07/compressed-http.html">здесь</a> :</p><blockquote> <p>так как вы это делаете? вот реклама, опять же из исходного кода mod\_deflate: работа только по основному запросу/без подзапросов. это означает, что все тело запроса должно быть сжато gzip, если мы решили использовать это, невозможно сжать только часть, содержащую файл, например, в составном запросе.</p> </blockquote><p>отдельно браузер может запросить сжатие содержимого ответа сервера, установив <code>accept-encoding</code> заголовок согласно <a href="http://www.http-compression.com/#client\_request">здесь</a> :</p><pre><code>get /index.html http/1.1 host: www.http-compression.com accept-encoding: gzip user-agent: firefox/1.0 </code></pre><p>это вернет сжатые данные в браузер.</p>

<p>отвечая на часть о сжатых запросах, а не ответах: да, это возможно, даже если это не кажется широко распространенным. клиентскому приложению необходимо установить соответствующий заголовок кодировки содержимого. что касается серверного приложения, есть 2 варианта:</p><ol> <li> <p>приложение поддерживает повторную разгрузку тела запроса самостоятельно. библиотека примеров, которая может сделать это, является phpxmlrpc.</p> </li> <li> <p>веб-сервер раздувает тело ответа перед передачей его в приложение. это возможно, используя f.e. фильтр mod\_deflate apache и настройка inputfilter</p> </li> </ol>

<p>не из любого браузера, о котором я знаю, вам нужно найти плагин, который сделает это за вас. по сути, вы должны установить http-заголовок с кодировкой содержимого, чтобы сервер знал, как поступает запрос. разумеется, сервер должен уметь обрабатывать эту кодировку.</p>

<p>это не разрешено. согласно спецификации http ( <a href="https://tools.ietf.org/html/rfc2616#section-14.11">rfc 2616</a> ), <code>content-encoding</code> не является одним из возможных полей заголовка запроса, поэтому сжатие тела объекта запроса невозможно, поскольку нет законного способа сообщить серверу, что это произошло. любое сжатие тела запроса выполняется только как нестандартное расширение.</p>