¿Qué causa un error de HTTP 405 " método no válido (verbo HTTP)" al publicar un formulario en PHP en IIS?


Tengo un formulario en una aplicación PHP (5.2.9-1) que hace que IIS (Microsoft-IIS/6.0) arroje el siguiente error cuando se publica:

La página que está buscando no se puede mostrar porque se utilizó un método no válido (verbo HTTP) para intentar acceder.

Es un código de estado HTTP 405. Todas las demás formas en la aplicación funcionan, así que creo que la configuración de verbos de IIS para páginas PHP es correcta.

Este es el servidor de un cliente, al que no tengo acceso para verificar la configuración o el código de prueba. Todo lo que puedo hacer es enviar los archivos de reemplazo del cliente. Otros clientes en servidores de IIS no tienen tal problema.

La forma es perfectamente sencilla:

<form method="post" action="index.php">
    ... fields ... 
</form>

¿Qué puede hacer que IIS lance ese error solo en una forma, pero funcione bien en otras?

Author: hakre, 2009-09-09

11 answers

Logré obtener acceso FTP al servidor del cliente y así pude rastrear el problema.

Después de publicar el formulario, autentico al usuario y luego redirijo a la parte principal de la aplicación.

Util::redirect('/apps/content');

El error no estaba ocurriendo en la publicación del formulario, sino en la redirección inmediatamente después de él. Por alguna razón, IIS continuaba presumiendo el método POST para la redirección, y luego objetando al POST a /apps/content ya que es un directorio.

El error mensaje nunca indicó que era la siguiente página que estaba generando el error-gracias Microsoft!

La solución fue añadir una barra final:

Util::redirect('/apps/content/');

IIS podría entonces resolver la redirección a un documento predeterminado ya que ya no está intentando publicar en un directorio.

 25
Author: drewm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-10 09:50:59

Estoy implementando aplicaciones VB6 IIS en mi servidor dedicado remoto con 75 carpetas. La razón por la que estaba recibiendo este error es que el documento predeterminado no estaba configurado en una de las carpetas, un descuido, por lo que la URL que golpeó esa carpeta no sabía qué página servidor, y por lo tanto lanzó el error mencionado en este hilo.

 7
Author: Boyd White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-06 21:44:33

Por casualidad, ¿has probado POST vs post? Este artículo de soporte sugiere que puede causar problemas con IIS: http://support.microsoft.com/?id=828726

 4
Author: David Carrington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-09 15:10:38

Los verbos aceptables se controlan en web.config (se encuentra en la raíz del sitio web) en <system.web><httpHandlers> y posiblemente <webServices><protocols>. Web.config será accesible para usted si existe. También hay un servidor global.config que probablemente no. Si puedes echar un vistazo a cualquiera de estos puede obtener una pista.

Los verbos aceptables pueden diferir con los tipos de contenido - ¿ha establecido encabezados de tipo de contenido en su página ? (es decir, si su tipo de contenido era application/json, entonces los verbos diferentes serían permitido)

 4
Author: Andiih,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-10 10:01:30

No se por qué, pero sucedió cuando se envía un formulario dentro de una página a sí mismo por el método POST.

Así que cambia method="post" a method="get" o elimina action="anyThings.any" de tu etiqueta <form>.

 2
Author: Bobby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-01 15:28:36

Parece que el servidor está teniendo problemas para manejar las solicitudes POST (get y post son verbos). No lo sé, cómo o por qué alguien configuraría un servidor para ignorar las solicitudes post, pero la única solución sería arreglar el servidor o cambiar tu aplicación para usar las solicitudes get.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-09 14:56:49

Tuve este problema con una aplicación de Facebook que estaba desarrollando para una pestaña de página de fans. Si alguien se enfrenta a este problema con una aplicación de Facebook entonces

1-goto https://developers.facebook.com

2-seleccione la aplicación que está desarrollando

3-asegúrese de que todo el enlace a su aplicación tiene barra de cola /

Mi problema estaba en el https://developers.facebook.com - > Aplicaciones - > MYAPPNAME - > configuración - > Pestaña de Página - > Pestaña de Página segura URL, Pestaña de página Editar URL, URL de pestaña de página espero que esto ayude

 0
Author: Waqleh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-03 09:49:15

Como el propio drewm dijo, esto se debe a la redirección posterior después de que el POST al script haya tenido éxito. (Podría haber añadido esto como un comentario a su respuesta, pero usted necesita 50 reputación para comentar y soy nuevo aquí-daft rule IMHO)

PERO también se aplica si está tratando de redirigir a una página, no solo a un directorio, al menos lo hizo para mí. Estaba tratando de redirigir a / gracias.HTML. Lo que soluciona esto es usar una URL absoluta, i. e. http://example.com/thankyou.html

 0
Author: Doug McLean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-11 08:40:20

Tuve que cambiar el POST de mi formulario a GET. estaba haciendo un post de demostración en una página html, en un sitio de prueba de Azure. lea esto para obtener información: http://support.microsoft.com/kb/942051

 0
Author: captainhero70,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-25 19:53:34

Acabamos de encontrarnos con este mismo problema. Nuestro Cpanel se ha expandido de PHP solo a PHP y. NET y por defecto a .NET.

Inicie sesión en su Cpanel y asegúrese de que no tiene el mismo problema.

 0
Author: Sam Monem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-10 18:51:16

Una posible causa adicional.

Mi página HTML tenía estas etiquetas iniciales:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

Esto fue en una página que utiliza el slideshow slick jquery.

Eliminé las etiquetas y las reemplacé con:

<html>

Y todo está funcionando de nuevo.

 -4
Author: John M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-08 16:43:09