2012-01-27 24 views
48

Esto redirigir una solicitud con un código de estado HTTP 302 temporal :HttpServletResponse sendRedirect permanente

HttpServletResponse response; 
response.sendRedirect("http://somewhere"); 

Pero, ¿es posible redireccionar con un código de estado HTTP 301 permanente ?

Respuesta

78

Debe configurar el estado de la respuesta y el encabezado Location manualmente.

response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
response.setHeader("Location", "http://somewhere/"); 

Ajuste del estado antes de sendRedirect() no funcionará como sendRedirect() habría overridde a SC_FOUND después.

+0

'Envía una respuesta de redirección temporal para el cliente usa la URL de ubicación de redireccionamiento especificada. Ok, tienes razón. De hecho, pensé que se comportaría de manera similar a la forma en que funciona con sendError después de establecer un estado. De ahí el 'ajuste de prueba' en mi publicación xD – chzbrgla

+2

El 'sendError()' toma el estado como argumento, 'sendRedirect()' no. Establece implícitamente 302, independientemente del estado actual. – BalusC

+2

Gracias, esto funciona. Para confirmar la respuesta, también debe vaciar el búfer: 'response.flushBuffer();' – z12345

-1

He utilizado el siguiente código, pero no funcionó para mí.

String newURL = res.encodeRedirectURL("..."); 
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
response.sendRedirect(newURL); 

entonces yo probamos este trozo de código que trabajó para mí

String newURL = res.encodeRedirectURL("..."); 
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
response.setHeader("Location", newURL); 

esto funcionó para mí, tuve el mismo problema

how to set status to 301 while redirecting

+0

Esta es la misma respuesta que la aceptada. – z12345

Cuestiones relacionadas