Os downloads de grandes PDFs à prova de balas contra erros de configuração do navegador?

1

Eu tenho um site rodando o apache cujo principal objetivo na vida é servir grandes arquivos pdf (10-30 Mb). Recebo e-mails com bastante frequência de usuários dizendo que estão tendo problemas para fazer o download dos arquivos:

  • "começará a baixar, mas o download não será concluído, ele congelará em cerca de 25%."

  • "Parece encontrar a página, mas apenas gira e gira ... Eu deixo passar 5 min. Sem dados. NO ENTANTO: Quando eu escolhi" download "eu consegui em segundos."

  • "De alguma forma, ele começa a carregar o pdf em cerca de 10%, tanto no Chrome quanto no Firefox."

Como não consigo reproduzir os problemas, e eles não parecem ocorrer para a grande maioria dos usuários, é muito difícil descobrir o que está acontecendo. Presumivelmente, os usuários configuraram mal seus navegadores ou plugins de alguma forma, ou talvez, em alguns casos, seja um problema de usabilidade com seu navegador ou plug-in. Fazer com que os usuários relatem mensagens de erro ou comportamentos específicos, descrevam sua configuração, etc., é como puxar os dentes.

Eu vi algumas outras perguntas que descrevem problemas semelhantes, mas elas parecem específicas do IIS, enquanto estou executando o apache:

Este bug não parece corresponder aos relatórios (vagos) que recebi:

Existe alguma técnica para a criação de balas da minha configuração, para que os usuários não experimentem tantos desses problemas? Detecção de navegador em javascript com uma mensagem apropriada? Avisar os usuários contra determinadas combinações de navegador / plug-in ou detectar automaticamente essas combinações? No momento, não consigo nem saber em quais linhas olhar no arquivo de log do apache para ver se algum erro foi registrado no lado do servidor. Possivelmente, tudo isso se torna mais complicado do que você esperaria para exibir um arquivo estático antigo, porque o Adobe Reader tenta ser complicado - embora esses PDFs não sejam otimizados.

Se alguém quiser tentar reproduzir o erro, um pdf para o qual os usuários relataram problemas está aqui: link [Agora pode ser impossível reproduzir o comportamento porque eu implementei a resposta de Håkan Lindqvist.]

    
por Ben Crowell 24.06.2014 / 21:19

2 respostas

1

Para descobrir se há algo que você possa fazer para melhorar isso, eu acho que você realmente vai querer descobrir com qual (is) combinação (s) de plugins do navegador / visualizador de pdf este problema ocorre e tentar encontrar uma maneira de reproduzi-lo. / p>

O Chrome e o Firefox são mencionados na pergunta, mas pelo menos o Chrome vem com seu próprio visualizador de PDF. No entanto, é perfeitamente possível usar o plug-in Acrobat Reader ou similar com qualquer um desses navegadores, portanto, apenas sabendo que o navegador realmente não responde qual software foi usado.

Por outro lado, se o objetivo for fazer com que os usuários simplesmente baixem os arquivos e você não queira lidar com as esquisitices de vários plugins, considere instruir o navegador a não abrir o arquivo. arquivo, mas basta baixá-lo.

Isso seria feito definindo Content-Disposition: attachment na resposta HTTP.

É claro que, dependendo de como seus usuários estão acostumados a trabalhar com esses arquivos, isso também poderia causar confusão, mas eu imagino que ter seu navegador salvando um arquivo e depois abri-lo localmente deve ser menos propenso a erros.

    
por 24.06.2014 / 22:29
0

Se você puder replicar isso, dê uma olhada no status de download, na solicitação e nos cabeçalhos de resposta. Isso lhe dará uma pista.

**Response Headers**
Accept-Ranges   bytes
Connection  Keep-Alive
Content-Length  9531692
Content-Range   bytes 11278-9542969/9542970
Content-Type    application/pdf
Date    Tue, 24 Jun 2014 21:08:45 GMT
Etag    "1b78005-919d3a-4f550c11dff40"
Keep-Alive  timeout=15, max=100
Last-Modified   Mon, 24 Mar 2014 02:11:33 GMT
Server  Apache/2.2.16 (Debian)


**Request Headers**
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection  keep-alive
Host    www.lightandmatter.com
If-Range    "1b78005-919d3a-4f550c11dff40"
Range   bytes=11278-
User-Agent  Mozilla/5.0 (Windows NT 6.2; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0

Status do download - 206 Conteúdo parcial . Por definição, isso significa que o "Cliente" fez essa solicitação, e não o contrário.

Assim, o cliente está solicitando, neste caso bytes = 11278 - , os cabeçalhos de resposta confirmam que está recebendo o Accept-Ranges .

Há uma coisa que me confunde, é que existe um hypen após o dígito 8.

Originalmente publicado aqui , mas uma solução possível (não testada) é adicionar o seguinte ao arquivo htaccess.

# Disable Byte-range for PDF files
<Files *.pdf>
    Header set Accept-Ranges none 
</Files>
    
por 24.06.2014 / 23:42