[Resolvido] Forçar download em servidor HTTPS (InputStreamDownload) (VRaptor)
12 respostas
R
rodrigoalegre
Boa tarde pessoal,
Estou com um problema bem específico, não sei se algum de vocês já passou por isso:
Tenho um projeto em Java, no qual o cliente pode fazer o download de arquivos que são gerados dinamicamente, essa classe retorna um InputStreamDownload.
Está funcionando perfeitamente, porém quando coloco em um servidor HTTPS, ele para de funcionar no IE8.
Aparece uma mensagem dizendo o IE não pode abrir o site.
O que eu reparei é que quando é HTTP, ele pega o nome do arquivo corretamente, mas com HTTPS, ele pega o nome do método que gera o arquivo (digo método porque estou usando o VRaptor).
Exatamente Lucas, essa foi a primeira “solução” que me veio a cabeça rs!
Estou sem ambiente SSL de testes, o pessoal de infra está providenciando, após o teste eu coloco o resultado aqui pra compartilhar com o pessoal que possa vir a ter esse problema.
Abraços!
R
rodrigoalegre
É Lucas, não rolou.
O IE troca o ponto por underline, ou seja, a URL “/download/123/arquivo.txt” se torna “/download/123/arquivo_txt”, e conseguentemente o erro permanece.
Vou pensar em mais alternativas. Toda ajuda é bem vinda!
Abraços!
R
rodrigoalegre
Prosseguindo com o post, eu consegui solucionar, porém não pude usar o VRaptor, fiz um Servlet.
Vou continuar pesquisando uma solução para isso usando o VRaptor, pois não gostaria de ter que “sair” dele para poder solucionar o problema.
Sugestões, discuções, são bem vindas!
Abraços.
Lucas_Cavalcanti
tenta trocar no do vraptor o “text/plain” pra “application/download”
R
rodrigoalegre
Já fiz esse teste e não rolou.
Me da a impressão que o servidor https coloca mais informações no header, mas é uma quantidade grande que acaba “removendo” os headers que o vraptor põe (naquele meu teste eu coloco um único header).
Um amigo está com exatamente o mesmo problema em .NET, e uma pessoa com quem ele tava conversando falou que acreditava ser relacionado a header, que fica maior com https mesmo.
Qualquer novidade eu posto aqui.
Abraços.
Lucas_Cavalcanti
receba o HttpServletResponse no construtor do controller e faça o mesmo código que vc fez na servlet… em todo caso é bizarro, pq o VRaptor faz um código mto parecido com o que vc fez:
só não tem o flush()
R
rodrigoalegre
Lucas Cavalcanti:
receba o HttpServletResponse no construtor do controller e faça o mesmo código que vc fez na servlet… em todo caso é bizarro, pq o VRaptor faz um código mto parecido com o que vc fez:
só não tem o flush()
Então, eu tinha olhado o código do VRaptor também e notei que era muuuito parecido, ai fiz o seguinte:
No meu método que “força o download”, coloquei um “response.reset()”, e funcionou.
Eu tenho um Interceptor que coloca algumas coisas no Header, então fazendo isso eu “limpo” o header completamente antes de forçar o download.
Um dos meus headers é sobre “pragma: no cache”, e me falaram que removendo ele funcionaria. E funcionou.
Embora ainda tenho dúvida da real origem: “pragma no cache” ou “excesso de headers”.
Hoje não tive tempo de testar isso, mas amanhã vou testar para ver qual é o problema exatamente.
Eu posto aqui o resultado para ficar com a solução bem definida.
Abraços velhão!
R
rodrigoalegre
Bom fiz os testes, e resumindo, o que faz com que o IE8 não deixe forçar download é o header “Pragma: no-cache” (setHeader(“Pragma”, “no-cache”)).