Pergunta

Se webserver pode enviar resposta gzip, por que não navegador enviou pedido gzip?

Foi útil?

Solução

O cliente eo servidor tem que concordar com a forma de comunicar; parte disso é se a comunicação pode ser comprimido. HTTP foi concebido como um modelo de solicitação / resposta, e a criação original foi quase certamente imaginou ter sempre pequenos pedidos e potencialmente grandes respostas. A compressão não é necessário para implementar HTTP, existem servidores e clientes que não suportam-lo.

compressão

HTTP é implementada pelo cliente dizendo que ele pode suportar a compressão, e se o servidor vê isso no pedido e suporta compressão pode comprimir a resposta. Para comprimir o pedido o cliente teria que ter um "pré-pedido" que realmente negociado que o pedido seria feito comprimido ou ele teria que exigem compressão como uma codificação suportada por todos os pedidos.

* ATUALIZAÇÃO fevereiro '17 * Tem sido 8 anos, mas como @ notas Phil_1984_, uma 3ª solução possível seria para o cliente e servidor para negociar apoio compressão e, em seguida, usar isso para os pedidos subsequentes. Na verdade, coisas como HSTS trabalhar exatamente dessa forma com o cache de cliente que os espera servidor para só falam TLS e ignorar todas as ligações não encriptadas. HTTP foi explicitamente projetado para ser apátrida, mas nós nos movemos para além disso neste momento.

Outras dicas

Um cliente não pode saber de antemão que um servidor iria entender um pedido compactado, mas o servidor pode saber que o cliente irá aceitar um.

Ele poderia, desde que poderia garantir que o servidor iria aceitá-lo. Isso pode significar usando um OPÇÕES solicitar.

Há um monte de coisas que os navegadores da web poderia fazer (por exemplo, canalizando) que eles não fazem. desenvolvedores do navegador Web considerar as implicações de compatibilidade de uma mudança.

Em um ambiente heterogêneo, há um monte de diferentes servidores e configurações da web. Fazer uma mudança para a forma como funciona um cliente poderia quebrar alguns deles.

Talvez apenas 1% dos servidores podem aceitar pedidos gzipped, mas talvez alguns dos que anunciam que fazer, mas não pode aceitar corretamente isso -. Forma que os usuários seria negado de upload de arquivos para esses sites

Historicamente tem havido um monte de implementações cliente / servidor quebradas -. Por um longo tempo, as respostas gzipped foram divididos em principais navegadores (felizmente esses são agora quase desaparecido)

Então, você iria acabar com listas negras, de facilidade de agentes ou servidores (ou nomes de domínio), onde essas opções foram automaticamente desligado, o que é desagradável.

Porque ele não sabe que o servidor pode aceitá-la. Uma transação HTTP tem um único pedido enviado pelo cliente seguida por uma resposta. Uma das coisas que o cliente envia é o que codificação / compressão pode suportar. O servidor pode então decidir como comprimir a resposta. O cliente não tem esse luxo.

Se você estiver escrevendo um aplicativo web, eu estou supondo que você está no controle do que é enviado para o cliente eo que é enviado de volta a partir do cliente.

Seria fácil o suficiente para escrever uma aplicação gzip em javascript, que comprime os dados de postagem de serem enviados para o servidor. O servidor pode ter um filtro (termo J2EE), que sabe de dados do cliente é enviado comprimido, este filtro descomprime os dados e, em seguida, passa os dados para o servlet (ou classes de ação em Struts) que ler os dados como normal por exemplo request.getParameter (...).

Isto parece perfeitamente lógico e capaz de fazer se você está no controle. Como outras publicações mencionar, você não poderia contar com o navegador para fazer isso automaticamente, mas desde que você está escrevendo as páginas da web, você pode obter o navegador para fazer a compressão você está atrás (com um pouco de trabalho).

Andy.

HTTP é projetado desta maneira:

  • O cliente diz que seu pedido em texto simples (incluindo, se pode compreender as respostas comprimido)
  • As respostas do servidor com a codificação propper (comprimido ou não)

Mas neste PROJETO o cliente não pode enviar pedidos compactados porque não sabe se o servidor vai entendê-la com antecedência.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top