2
respostas

HTTP Status 412 – Precondition Failed

Olá a todo!

Então, eu estava realizando alguns testes e não tive nenhum problemas com o direcionamento do lado do servidor:

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getSession().removeAttribute("usuario.logado");
        RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/paginas/logout.html");
        dispatcher.forward(req, resp);
    }

No entanto, eu estou me deparando com um erro muito chato que não estou conseguindo resolver e nem estou entendendo de onde está surgindo.

Após redirecionar para a página html que me diz, Usuário deslogado, se eu apertar F5 novamente para atualizar a página, eu recebo um erro:

HTTP Status 412 – Precondition Failed
Type Status Report
Description One or more conditions given in the request header fields evaluated to false when tested on the server.

Se desse erro eu apertar F5 novamente, volta a carregar a página com o Usuário deslogado !

E cada vez que eu aperto F5 fica alternando entre o erro e a página redirecionada.

Minha pergunta é: Por que esse comportamento está acontecendo, e como faço pra parar com esse erro?

Valeu a todos!

2 respostas

Opa Bruno, essa dúvida já apareceu e já discutimos ela => https://cursos.alura.com.br/forum/topico-falha-http-status-412-no-exercicio-3-da-aula-9-25605 :).

Opa Alberto, tranquilo?

Então, é verdade, essa discussão já ta rolando, mas parece que não chegou bem a uma conclusão.

segundo o comentário do Gustavo Guimarães ele fala:

Já quando usamos apenas o F5, ele faz a requisição apenas usando a URI armazenada no cache (http://localhost:8080/gerenciador/logout), mas esse caminho não existe no servidor, pois o arquivo logout.html está na pasta /web-inf/paginas/logout.html. E o servidor também não executa a lógica. Daí o erro 412. Quando damos F5 novamente passa a funcionar, pois o browser fez uma nova requisição para o servidor porque a informação armazenada no cache não deu certo.

Nesse caso, teria uma forma de quando mandar a requisição original ele avisar ao cliente para não armazenar a URI em cache? Eu entendo que não faz sentido, mas a ideia seria redirecionar o usuário para outra página case ele tivesse apertando F5 ou atualizando uma requisição que já foi feita.