7.2.1.3. Códigos de respuesta¶
Ya se ha ilustrado cómo la primera línea de la respuesta de un servidor incluye un código que informa al cliente de cuál ha sido la suerte que ha corrido su petición. Esta línea tiene el siguiente formato:
HTTP/VERSION CODIGO LEYENDA_DEL_CODIGO
La leyenda está asociada al código númerico, de manera que cada uno tiene referida en el estándar la suya.
Los códigos numéricos tienen tres cifras y la primera de ellas indica la naturaleza de la respuesta. Algunos de los códigos más habituales son los siguientes[1]:
- 1XX
Respuestas informativas.
- 2XX
Peticiones correctas. La más habitual en las peticiones que piden recursos es 200 OK.
- 3XX
Redirecciones. Ante esta respuesta, se supone que el cliente deberá su petición pidiendo otro recurso. Algunos de los códigos posibles son:
- 301 Moved Permanently
El servidor informa de que las peticiones a este recurso, se debería redirigir a otro. Por ejemplo:
$ wget --spider -qS --max-redirect=0 'http://biblioteca.example.net/wp-admin' HTTP/1.1 301 Moved Permanently Server: nginx Date: Sat, 27 Jan 2018 11:22:24 GMT Content-Type: text/html Location: http://www.example.net/biblioteca/wp-admin X-Varnish: 170711 Age: 0 Via: 1.1 varnish-v4 Content-Length: 178 Connection: keep-alive
O sea, el servidor responde que el recurso pedido siempre se encontrará en el valor del campo
Location
. Por tanto, el cliente deberá pedir ese recurso en una nueva petición si quiere acceder al contenido. Por lo general, los clientes recuerdan esto y, si volvemos a pedir el primer recurso, harán directamente la segunda petición para ahorrar tiempo y ancho de banda.- 302 Found
Originariamente, en HTTP/1.0 su descripción es Moved Temporarily y significa volver a repetir la petición usando el recurso declarado en el campo
Location
. Sin embargo, los navegadores implementaron la respuesta repitiendo la petición usando el método GET, aunque la petición original fuera POST. Por compatibilidad con navegadores antiguos, algunos servidores siguen usando este significado. HTTP/1.1 introdujo dos nuevos códigos, los 303 y 307, para evitar cualquier posible ambigüedad.- 303 See Other
Insta a repetir la petición usando el método GET.
- 304 Not Modified
Respuesta que envía el servidor si el recurso no ha cambiado desde la última vez que el cliente hizo la misma petición. Para ello el cliente debe enviar un campo de cabecera
If-Modified-Since
con la fecha y hora para el servidor pueda tomarlo como referencia.- 307 Temporary Redirect
Como 303, pero en este caso no se permite cambiar el método inicial de petición, por lo que si el cliente usó el método POST también tendrá que usarlo para pedir el recurso en la nueva dirección suministrada.
- 308 Permanent Redirect
Como 301, pero se impide el cambio de método de petición.
- 4XX
Peticiones erróneas a causa del cliente
- 400 Bad Request
La sintaxis de la petición es errónea.
- 401 Unathorized
Se prohibe el acceso porque la autorización requerida ha fallado.
- 403 Forbidden
El acceso al recurso está prohibido.
- 404 Not Found
El recurso solicitado no existe.
- 405 Method Not Allowed
El método utilizado no se permite.
- 406 Not Acceptable
El servidor no es capaz de devolver el recurso en ninguno de los formatos aceptados por el cliente.
- 410 Gone
El recurso solicitado se eliminó del servidor y no volverá a estar disponible nunca más.
- 451 Unavailable for Legal Reasons
El recurso solicitado se eliminó del servidor por mandato judicial.
- 5XX
Peticiones erróneas a causa del servidor. En estos casos el servidor debe informar de cuál es la razón del error (en el cuerpo de la respuesta)
- 500 Internal error
Suele ser producido por errores de las aplicaciones web empotradas en el servidor y que generan contenido dinámico.
- 501 Not implemented
El servidor no soporta alguna funcionalidad que se requiere para responder a la petición. Por ejemplo, no soporta el método solicitado.
- 502 Bad Gateway
Respondido por proxy que no logran contactar con el servidor de backend.
- 503 Service Unavailable
No se puede responder a la petición del cliente.
Notas al pie