2009-09-09 26 views
29

Tengo un formulario en un (5.2.9-1) la aplicación PHP que hace que IIS (Microsoft-IIS/6.0) para lanzar el siguiente error cuando Publicado:¿Qué causa un error HTTP 405 "Método inválido (verbo HTTP)" al enviar un formulario a PHP en IIS?

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

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

Este es un servidor del 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 IIS no tienen ese problema.

La forma es perfectamente clara:

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

¿Qué puede causar IIS para tirar ese error en una sola forma, pero funcionar bien en los demás?

Respuesta

24

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

Después de que se envíe el formulario POST, autentico al usuario y luego lo redirecciono a la parte principal de la aplicación.

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

El error no se estaba produciendo sobre el desplazamiento de la forma, sino en la redirección inmediatamente después de ella. Por alguna razón, IIS seguía presumiendo el método POST para el redireccionamiento, y luego oponiéndose al POST al /apps/content, ya que es un directorio.

El mensaje de error nunca indicó que era la siguiente página la que generaba el error. ¡Gracias Microsoft!

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

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

IIS entonces podría resolver la redirección a un documento predeterminado que ya no es el intento de publicar una entrada en un directorio.

0

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

+0

Pero esto tiene que ser determinista, ¿verdad? Debe haber algo que haga que una forma falle y que todas las demás funcionen. – drewm

4

¿Alguna vez ha intentado POST vs post? Este artículo de soporte sugiere que puede causar problemas con IIS: http://support.microsoft.com/?id=828726

+0

Porque, de acuerdo con RFC 2616 (HTTP/1.1), los tokens de método definidos por RFC tienen mayúsculas y todos distinguen entre mayúsculas y minúsculas. – GZipp

+0

Cambiar POST a mayúsculas no cambió el comportamiento. – drewm

+0

publicación no difiere de POST -> html es case sensitive –

4

Los verbos aceptables se controlan en web.config (que se encuentra en la raíz del sitio web) en <system.web><httpHandlers> y posiblemente <webServices><protocols>. Web.config estará disponible si existe. También hay un server.config global que probablemente no lo hará. Si puede echarle un vistazo a cualquiera de estos, puede obtener una pista.

Los verbos aceptables pueden diferir con los tipos de contenido. ¿Ha configurado los encabezados de tipo de contenido en su página? (es decir, si su tipo de contenido era application/json, se permitirían verbos diferentes)

+0

Desafortunadamente, el entorno de alojamiento compartido del cliente no ofrece acceso a system.web/httpHandlers. – drewm

+0

Para mayor claridad y para aquellos que no están familiarizados con.net Debería haber escrito - - esta es una sección dentro de web.config, que normalmente se encuentra en la raíz del sitio web, no en una ruta del sistema de archivos. Editaré mi publicación para reflejar eso, ¡aunque veo que ya lo resolvió! – Andiih

7

Estoy implementando aplicaciones VB6 IIS en mi servidor dedicado remoto con 75 carpetas.La razón por la que obtuve este error es que el Documento Predeterminado no estaba configurado en una de las carpetas, un descuido, por lo que la URL que golpeaba esa carpeta no sabía qué página enviar al servidor y arrojó el error mencionado en este hilo.

2

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

Cambie el method="post" al o elimine el action="anyThings.any" de la etiqueta <form>.

+1

¿Sabes cuál es la diferencia entre 'post' y' get'? mala sugerencia – Dementic

0

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 a continuación

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

2-seleccionar la aplicación que está desarrollando

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

mi problema estaba en la> Apps-> MYAPPNAME-> configuración-> Página pestaña> Secure URL https://developers.facebook.com- pestaña, pestaña Editar URL, URL de la página Tab Esperamos que esto ayude

0

Como dijo el propio drewm, esto se debe a la redirección posterior después de que el POST del script haya tenido éxito. (Podría haber agregado esto como un comentario a su respuesta, pero necesita 50 reputación para comentar y estoy aquí por aquí nueva - regla en mi humilde opinión)

PERO también se aplica si está intentando redirigir a una página, no solo un directorio, al menos lo hizo por mí. Intentaba redireccionar a /thankyou.html. Lo que soluciona esto es el uso de una URL absoluta, es decir, http://example.com/thankyou.html

-2

Una posible causa adicional.

Mi página HTML tenía las siguientes etiquetas: a partir

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

Esto fue en una página que el uso de la presentación de diapositivas jQuery resbaladiza.

que eliminarán las etiquetas y se sustituye por:

<html> 

Y todo está funcionando de nuevo.

Cuestiones relacionadas