HTTP 405 Method Not Allowed: qué significa y cómo solucionarlo

HTTP 405 Method Not Allowed

HTTP 405 Method Not Allowed: causas, cabecera Allow y soluciones | We.Inc

Por qué un servidor responde 405, la cabecera Allow que debe enviar y cómo solucionarlo en Flask, Express y Next.js. Crea la respuesta 405 correcta para tu propia ruta.

Un 405 Method Not Allowed significa que la URL existe pero no acepta el método HTTP que usaste, por ejemplo un POST enviado a una ruta que solo gestiona GET. El servidor debe indicar los métodos que sí acepta en una cabecera Allow. Envía uno de esos, o añade en el servidor un manejador para tu método.

El 405 comparado con sus vecinos

Marca los métodos que gestiona tu ruta, elige el método que envía un cliente, y el generador muestra la respuesta exacta que debería devolver el servidor: un éxito normal, o un 405 con una cabecera Allow que incluye los métodos en el orden en que los marcaste.

Preguntas frecuentes

¿El 405 es un problema del cliente o del servidor?

Es un código 4xx, así que lo que el servidor rechaza es la petición. O el cliente debe usar otro método, o el responsable del servidor debe añadir soporte para el que se está enviando.

¿Una respuesta 405 tiene que incluir la cabecera Allow?

Sí. RFC 9110 dice que el servidor debe generar un campo de cabecera Allow con los métodos que el recurso admite en ese momento. Se permite una lista vacía cuando el recurso no acepta ningún método.

¿Por qué recibo un 405 al enviar un formulario?

Normalmente el formulario envía un método que la ruta no acepta. Una ruta en Flask, por ejemplo, solo responde a GET hasta que pasas methods=["GET", "POST"] al decorador de la ruta.

¿Por qué Express me da 404 en lugar de 405?

Express trata igual un método y una ruta que no coinciden: ninguna ruta respondió, así que la petición acaba en el manejador de 404. Añade una captura para la ruta con app.all para enviar tú mismo el 405.

¿Qué diferencia hay entre 405 y 501?

405 significa que este recurso rechaza un método que el servidor entiende. 501 significa que el servidor no admite el método para ningún recurso.

La regla de la especificación

De dónde suele venir un 405

Soluciones por stack

Flask: declara cada método que acepta la ruta

Sin methods=, la ruta solo responde a GET (Flask añade HEAD y OPTIONS automáticamente).

Express: envía un 405 real en lugar de caer en el 404

app.all después de los manejadores reales captura cualquier otro método para la misma ruta.

Route handler de Next.js: exporta el método que invocas

app/api/items/route.ts. Una petición con un método que no exportaste no puede llegar a tu código.

HTML: dale al formulario el método que espera el servidor

Un formulario sin atributo method se envía como GET.

Generador de respuestas 405

Métodos que gestiona esta ruta

Método que envía el cliente

Lo que debería devolver el servidor

El método está admitido, así que no hay ningún 405 de por medio.

El método no está en la lista, así que la respuesta es un 405 con una cabecera Allow que nombra los {n} métodos que marcaste.

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio