Com o Chrome 12.0.742.112, se eu redirecionar com os seguintes cabeçalhos:
HTTP/1.1 302 Found
Location: http://0.0.0.0:3000/files/download.zip
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Ua-Compatible: IE=Edge
X-Runtime: 0.157964
Content-Length: 0
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Tue, 05 Jul 2011 18:42:25 GMT
Connection: Keep-Alive
Que se seguido retorna o seguinte cabeçalho:
HTTP/1.1 200 OK
Last-Modified: Tue, 05 Jul 2011 18:18:30 GMT
Content-Type: application/zip
Content-Length: 150014
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Tue, 05 Jul 2011 18:44:47 GMT
Connection: Keep-Alive
O Chrome não redireciona nem altera a página anterior; apenas informa o seguinte aviso no console:
Recurso interpretado como Documento, mas transferido com o tipo MIME application / zip.
O processo funciona corretamente no Firefox e também funciona bem no Chrome se eu abrir uma nova guia e ir diretamente para http://0.0.0.0:3000/files/download.zip
. Estou fazendo algo errado ou isso é um bug / peculiaridade do Chrome?
javascript
google-chrome
Ashley Williams
fonte
fonte
Respostas:
Você pode especificar o atributo de download HTML5 na sua tag <a>.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download
fonte
No cabeçalho da sua solicitação, você enviou, o
Content-Type: text/html
que significa que deseja interpretar a resposta como HTML. Agora, mesmo que o servidor envie arquivos PDF, seu navegador tentará entendê-lo como HTML. Esse é o problema. Estou procurando ver qual poderia ser o motivo. :)fonte
Content-Type: application/zip
sem sucesso, ele ainda tenta processá-lo como um 'Documento'. Provavelmente também vale a pena ressaltar que o URL do zip é dinâmico no meu aplicativo, por isso não tem nada a ver com o cache.Accept
cabeçalho da solicitaçãotext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
, talvez? Estou absolutamente perplexo aqui, estou mesmo!text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
há uma parte que diz que o Chrome aceita quase tudo (*/*
).Experimentei esse problema ao exibir um arquivo PDF (tipo MIME application / pdf) e o resolvi definindo o cabeçalho Content-Disposition, por exemplo:
Espero que ajude.
fonte
Eu consertei isso ... simplesmente abrindo uma nova guia.
Por que não estava funcionando, não tenho muita certeza, mas poderia ter algo a ver com o modo como o Chrome lida com vários downloads em uma página, talvez pensasse que eram spam e os ignorasse.
fonte
Não consegui encontrar em lugar algum apenas uma explicação da mensagem por si só. Aqui está a minha interpretação.
Pelo que entendi, o Chrome esperava algum material que pudesse exibir (um documento ), mas obteve algo que não pôde exibir (ou algo que foi instruído a não exibir).
Esta é uma questão de como o documento foi declarado no nível da página HTML
href
(veja odownload
atributo na mensagem de Roy) e como é declarado na resposta do servidor por meio de cabeçalhos HTTP (em particularContent-Disposition
). Esta é uma questão de contrato , em oposição à esperança e expectativa.Para continuar no caminho de Evan, experimentei isso:
é apenas inconsistente com:
O Chrome irá chorar Recurso interpretado como documento, mas transferido…
Na verdade, a disposição do anexo significa apenas isso: o navegador não deve interpretar o link, mas armazená-lo em algum lugar para outros fins ocultos. Aqui acima, um
download
está faltando ao ladohref
ouContent-disposition
deve ser removido dos cabeçalhos. Depende se queremos que o navegador renderize o documento ou não.Espero que isto ajude.
fonte
Encontrei esse mesmo problema hoje com a versão 30.0.1599.66 do Chrome com meu aplicativo node.js / express.js.
Os cabeçalhos estão corretos, expressos os define corretamente automaticamente, funciona em outros navegadores conforme indicado, colocando o atributo html 5 'download' não resolve, o que fez resolveu é entrar nas configurações avançadas do chrome e marcar a caixa "Pergunte onde salvar cada arquivo antes de baixar ".
Depois disso, não houve erro "Recurso interpretado como documento ...." relatado como no título deste problema, para que pareça que o código do servidor esteja correto, é o Chrome que está relatando incorretamente esse erro no console quando está definido para salvar arquivos para um local automaticamente.
fonte
Eu tive um problema semelhante ao realizar um download de arquivo através de Javascript. A adição do atributo de download não fez diferença, mas a adição de target = '_ blank' ocorreu - não recebo mais a mensagem do console 'Resource interpretated as Document ...'.
Aqui está o meu código bem simples:
Eu não tentei com HTML direto, mas esperaria que funcionasse.
Observe que descobri que o Firefox exige que o link seja anexado ao documento, enquanto o Chrome funcionará sem ele.
fonte
Encontrei isso quando atribuí src = "image_url" em um iframe. Parece que o iframe o interpreta como um documento, mas não é. É por isso que exibe um aviso.
fonte
var photoData = new FormData();
e, em seguida, defina a propriedadecontentType: false
na minha solicitação ajax. A solicitação de postagem será:Content-Disposition: form-data;
E o tipo de conteúdoContent-Type: text/html
Eu resolvi o problema pelo
adding target="_blank"
link. Com isso, o chrome abre uma nova guia e carrega o PDF sem aviso, mesmo no modo responsivo.fonte
window.open(href, '_blank');
e a nova guia se fecha automaticamente após o download.Eu tive esse problema em um projeto de site da ASP. A adição de um cabeçalho "Comprimento do conteúdo" fez com que os downloads voltassem a funcionar no Chrome.
fonte
Este problema foi reaparecido na versão Chrome 61. Mas parece que está corrigido no Chrome 62.
Eu tenho uma RewriteRule como abaixo
Com o Chrome 61, o PDF não estava abrindo; no console, estava mostrando a mensagem
Tentamos adicionar o tipo mime na regra de reescrita como abaixo, mas isso não ajudou.
Atualizei meu Chrome para a versão 62 mais recente e ele começou a mostrar o PDF novamente. Mas a mensagem ainda está lá no console.
Com todos os outros navegadores, estava / está funcionando bem.
fonte
Acabei de encontrar esta e nenhuma das outras informações que pude encontrar ajudaram: foi um erro estúpido: eu estava enviando saída para o navegador antes de iniciar o download do arquivo. Surpreendentemente, não encontrei erros úteis (como "cabeçalhos já enviados" etc.). Felizmente, isso poupa a alguém um pouco de sofrimento!
fonte
No meu caso, o nome do arquivo era muito longo e obteve o mesmo erro. Uma vez encurtado abaixo de 200 caracteres, funcionou bem. (o limite pode ser 250?)
fonte
Eu recebi esse erro porque estava servindo no meu sistema de arquivos. Depois que eu comecei com um servidor http, o chrome conseguia descobrir.
fonte
Eu estava enfrentando o mesmo problema com um gerenciador de downloads que criei. O problema que eu estava envolvendo era o nome do arquivo muito longo e a extensão sendo cortada.
Exemplo: nome do arquivo: protocolos organizacionais e outras coisas importantes.pd
Solução: aumentou o campo do banco de dados MySQL para 255 para armazenar o nome do arquivo e executou uma verificação de comprimento antes de salvar o blob. Se o comprimento> 255, reduza para 250 e adicione a extensão do arquivo.
fonte
Experimente o código abaixo e espero que isso funcione para você.
fonte
Eu já enfrentei isso hoje e meu problema foi que minha
Content-Disposition
tag foi definida incorretamente. Parece para ambospdf
eapplication/x-zip-compressed
, você deve configurá-lo para eminline
vez deattachment
.Então, para definir seu cabeçalho, o código Java ficaria assim:
fonte