.. _http-codes: 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\ [#]_: **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. .. rubric:: Notas al pie .. [#] La wikipedia los `desglosa todos `_.