É possível ativar a compactação http para solicitações?

32

Eu vejo muitas informações sobre como ativar a compactação http para as respostas do servidor, mas sobre as solicitações recebidas. Não faria sentido que os navegadores comprimam grandes postagens antes de enviá-las ao servidor?

Outro exemplo é um serviço web REST que usamos. Temos que enviar solicitações PUT frequentes com grandes arquivos XML (10+ MB) e definitivamente veríamos alguns benefícios de largura de banda / velocidade em ambos os lados.

Então, isso é um problema resolvido no lado do servidor ou cada aplicativo da Web precisa lidar com isso individualmente?

    
por Mike L 20.08.2009 / 16:00

4 respostas

25

Para PUT data para o servidor compactado, você deve compactar o corpo da solicitação e definir o Content-Encoding: gzip header. O cabeçalho em si deve ser descompactado. Está documentado em mod_deflate :

The mod_deflate module also provides a filter for decompressing a gzip compressed request body. In order to activate this feature you have to insert the DEFLATE filter into the input filter chain using SetInputFilter or AddInputFilter.

...

Now if a request contains a Content-Encoding: gzip header, the body will be automatically decompressed. Few browsers have the ability to gzip request bodies. However, some special applications actually do support request compression, for instance some WebDAV clients.

E um artigo descrevendo é aqui :

So how do you do it? Here is a blurb, again from the mod_deflate source code: only work on main request/no subrequests. This means that the whole body of the request must be gzip compressed if we chose to use this, it is not possible to compress only the part containing the file for example in a multipart request.

Separadamente, um navegador pode solicitar que o conteúdo da resposta do servidor seja compactado, definindo Accept-Encoding header 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 ao navegador.

    
por 20.08.2009 / 16:14
4

Respondendo a parte sobre solicitações compactadas, não respostas: sim, é possível, mesmo que não pareça de 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 duas opções:

  1. o aplicativo suporta a reinflação do corpo da solicitação sozinho. Um exemplo de biblioteca que pode fazer isso é o phpxmlrpc.

  2. o servidor da Web insufla o corpo da resposta antes de transmiti-lo ao aplicativo. Isto é possível usando f.e. o filtro mod_deflate do Apache e configurando um inputFilter

por 22.07.2014 / 13:34
2

Não de forma nativa de qualquer navegador que eu conheça, você teria que encontrar um plugin que faria isso por você. Basicamente, você precisa definir o cabeçalho HTTP de codificação de conteúdo para permitir que o servidor saiba como a solicitação está chegando. É claro que o servidor precisa ser capaz de lidar com essa codificação.

    
por 20.08.2009 / 16:05
1

Isto NÃO é permitido. De acordo com a especificação HTTP (RFC 2616), Content-Encoding NÃO é um dos possíveis campos de cabeçalho de solicitação, portanto, não é possível compactar o corpo da entidade de solicitação, pois não há nenhuma maneira legal de informar ao servidor que isso ocorreu. Qualquer compactação do corpo da solicitação é feita apenas como uma extensão não padrão.

    
por 20.07.2016 / 18:55