2009-08-04 15 views
28

Según la especificación HTTP:¿Se permite enviar una respuesta HTTP POST a un cuerpo de respuesta?

Si un recurso se ha creado en el servidor origen, la respuesta debería ser 201 (Creado) y contienen una entidad que describe el estado de la solicitud y se refiere al nuevo recurso , y un encabezado Location (ver sección 14.30).

¿Esto significa que la solicitud POST siempre debe enviar el URI de redirección en el encabezado de Ubicación sin cuerpo de respuesta?

Respuesta

25

Es perfectamente aceptable especificar un cuerpo de respuesta y utilizando el encabezado de ubicación al mismo tiempo. Cuando utiliza el encabezado de Ubicación con una respuesta 201, no está redireccionando al cliente, solo le indica dónde puede encontrar el recurso en el futuro.

Los redireccionamientos solo se aplican a las respuestas 3xx.

El W3C docs for this explicar con más detalle, aunque el texto es en realidad bastante ambigua:

El campo de respuesta-cabecera Location se utiliza para redirigir el receptor a una ubicación distinta de la URI de solicitud para la terminación de la solicitud o identificación de un nuevo recurso. Para 201 (respuestas creadas), la ubicación es la del nuevo recurso creado por la solicitud. Para las respuestas 3xx, la ubicación DEBERÍA indicar el URI preferido del servidor para la redirección automática al recurso.

Lo leí diciendo "... redirigir ... o ... identif [y] ... nuevo recurso", pero no es exactamente una simple frase en inglés.

+6

¿Cuál es la respuesta? ¿es "en una palabra, no" o "puede especificar un cuerpo de respuesta y usar el encabezado de ubicación al mismo tiempo"? –

+6

Estaba respondiendo a la pregunta al final del texto del cuerpo, no a la pregunta en el título. –

+0

Estaba pensando en la misma línea.Solo quería estar doblemente seguro. Gracias Rob. –

12

Basado en paragraph 9.5 of the HTTP 1.1 specification, que es la referencia para preguntas como esa, aquí es mi entendimiento:

Sí se puede, y la especificación es claro acerca de lo que puede hacer y cómo hacerlo:

La acción realizada por el método POST puede no dar como resultado un recurso que pueda identificarse mediante un URI. En este caso, 200 (OK) o 204 (Sin contenido) es el estado de respuesta apropiado, dependiendo de si la respuesta incluye o no una entidad que describe el resultado.

Si se ha creado un recurso en el servidor de origen, la respuesta DEBERÍA ser 201 (Creado) y contener una entidad que describa el estado de la solicitud y haga referencia al nuevo recurso y un encabezado de Ubicación (ver sección 14.30) .

Las respuestas a este método no se pueden almacenar en caché, a menos que la respuesta incluya campos de encabezado Cache-Control o Expires apropiados. Sin embargo, la respuesta 303 (ver otro) se puede usar para dirigir al agente de usuario a recuperar un recurso almacenable en caché.

Cuestiones relacionadas