É possível ativar a compactação http para solicitações?
35
Vejo muitas informações sobre a ativação da compactação http para respostas do servidor, mas e sobre solicitações recebidas. Não faria sentido para os navegadores compactar postagens grandes antes de enviá-las ao servidor?
Outro exemplo é um serviço da web REST que usamos. Temos que enviar solicitações frequentes de PUT com arquivos XML grandes (10 ou mais MB) e definitivamente veríamos alguns benefícios de largura de banda / velocidade de ambos os lados.
Portanto, esse é um problema resolvido no servidor ou cada aplicativo Web precisa lidar com isso individualmente?
Para PUTdados no servidor compactado, você deve compactar o corpo da solicitação e definir o Content-Encoding: gzipcabeçalho. O cabeçalho em si deve ser descompactado. Está documentado em mod_deflate :
O módulo mod_deflate também fornece um filtro para descomprimir um corpo de solicitação compactado gzip. Para ativar esse recurso, você deve inserir o filtro DEFLATE na cadeia de filtros de entrada usando SetInputFilter ou AddInputFilter.
...
Agora, se uma solicitação contiver um cabeçalho Content-Encoding: gzip, o corpo será descompactado automaticamente. Poucos navegadores têm a capacidade de compactar os corpos de solicitação. No entanto, alguns aplicativos especiais oferecem suporte à compactação de solicitações, por exemplo, alguns clientes WebDAV.
Então como você faz isso? Aqui está uma sinopse, novamente a partir do código fonte mod_deflate: trabalhe apenas na solicitação principal / sem sub-requisições. Isso significa que todo o corpo da solicitação deve ser compactado com gzip se optarmos por usá-lo, não é possível compactar apenas a parte que contém o arquivo, por exemplo, em uma solicitação com várias partes.
Separadamente, um navegador pode solicitar que o conteúdo da resposta do servidor seja compactado definindo o Accept-Encodingcabeçalho conforme aqui :
GET /index.html HTTP/1.1
Host: www.http-compression.com
Accept-Encoding: gzip
User-Agent: Firefox/1.0
Isso retornará dados compactados para o navegador.
+1 NB Você escreve you must compress the whole request, inclusive of header. No entanto, os cabeçalhos http não devem ser compactados . A única coisa que precisa ser compactada (na íntegra, como o artigo que você cita corretamente declara), é o corpo do http.
Eugene Beresovsky
1
Isso está errado: Accept-Encodinginforma ao servidor qual compressão o cliente suporta. O cabeçalho Content-Encodingdescreve a compressão do corpo.
Maaartinus 12/08
@maaartinus ver primeira citação segundo parágrafo. Reorganizei a resposta para maior clareza.
Andy Andy
4
Respondendo à parte sobre solicitações compactadas, não respostas: sim, é possível, mesmo que não pareça estar em uso generalizado. O aplicativo do lado do cliente precisa definir o cabeçalho de codificação de conteúdo apropriado. Quanto ao aplicativo do lado do servidor, existem 2 opções:
o aplicativo suporta a reinflação do corpo da solicitação por si só. Um exemplo de biblioteca que pode fazer isso é o phpxmlrpc.
o servidor da web infla o corpo da resposta antes de passá-lo para o aplicativo. Isso é possível usando fe o filtro mod_deflate do Apache e configurando um inputFilter
Não nativamente de qualquer navegador que eu conheça, você precisaria encontrar um plug-in que faria isso por você. Você basicamente precisa definir o cabeçalho HTTP de codificação de conteúdo para informar ao servidor como a solicitação está chegando. O servidor, é claro, precisa ser capaz de lidar com essa codificação.
Isso não é permitido. De acordo com a especificação HTTP ( RFC 2616 ), Content-EncodingNÃO é um dos campos possíveis do cabeçalho da solicitação; portanto, não é possível compactar o corpo da entidade da solicitação, pois não há uma maneira legal de informar o servidor de que isso ocorreu. Qualquer compactação do corpo da solicitação é feita apenas como uma extensão não padrão.
Esta resposta está errada RFC 2616 menciona especificamente que If the content-coding of an entity in a request message is not acceptable to the origin server, the server SHOULD respond with a status code of 415 (Unsupported Media Type)., além disso, indicado por Request and Response messages MAY transfer an entity if not otherwise restricted by the request methode Content-Encodingser listado como uma opção naentity-header
you must compress the whole request, inclusive of header
. No entanto, os cabeçalhos http não devem ser compactados . A única coisa que precisa ser compactada (na íntegra, como o artigo que você cita corretamente declara), é o corpo do http.Accept-Encoding
informa ao servidor qual compressão o cliente suporta. O cabeçalhoContent-Encoding
descreve a compressão do corpo.Respondendo à parte sobre solicitações compactadas, não respostas: sim, é possível, mesmo que não pareça estar em uso generalizado. O aplicativo do lado do cliente precisa definir o cabeçalho de codificação de conteúdo apropriado. Quanto ao aplicativo do lado do servidor, existem 2 opções:
o aplicativo suporta a reinflação do corpo da solicitação por si só. Um exemplo de biblioteca que pode fazer isso é o phpxmlrpc.
o servidor da web infla o corpo da resposta antes de passá-lo para o aplicativo. Isso é possível usando fe o filtro mod_deflate do Apache e configurando um inputFilter
fonte
Não nativamente de qualquer navegador que eu conheça, você precisaria encontrar um plug-in que faria isso por você. Você basicamente precisa definir o cabeçalho HTTP de codificação de conteúdo para informar ao servidor como a solicitação está chegando. O servidor, é claro, precisa ser capaz de lidar com essa codificação.
fonte
Isso não é permitido. De acordo com a especificação HTTP ( RFC 2616 ),
Content-Encoding
NÃO é um dos campos possíveis do cabeçalho da solicitação; portanto, não é possível compactar o corpo da entidade da solicitação, pois não há uma maneira legal de informar o servidor de que isso ocorreu. Qualquer compactação do corpo da solicitação é feita apenas como uma extensão não padrão.fonte
If the content-coding of an entity in a request message is not acceptable to the origin server, the server SHOULD respond with a status code of 415 (Unsupported Media Type).
, além disso, indicado porRequest and Response messages MAY transfer an entity if not otherwise restricted by the request method
eContent-Encoding
ser listado como uma opção naentity-header