web-dev-qa-db-fra.com

Qu'est-ce qui provoque l'erreur HTTP 405 "méthode invalide (verbe HTTP)" lors de l'envoi d'un formulaire à PHP sur IIS?

J'ai un formulaire dans une application PHP (5.2.9-1) qui force IIS (Microsoft-IIS/6.0) à générer l'erreur suivante lors de l'envoi:

La page que vous recherchez ne peut pas être affichée car une méthode non valide (verbe HTTP) a été utilisée pour tenter un accès.

C'est un code d'état HTTP 405. Tous les autres formulaires de l'application fonctionnent. Je pense donc que le paramètre de verbes IIS pour les pages PHP est correct.

Il s'agit du serveur d'un client, auquel je n'ai pas accès pour vérifier les paramètres ou tester le code. Tout ce que je peux faire, c'est envoyer les fichiers de remplacement du client. Les autres clients sur les serveurs IIS n'ont pas ce problème.

Le formulaire est parfaitement simple:

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

Qu'est-ce qui peut faire que IIS jette cette erreur sur un seul formulaire, mais fonctionne correctement sur les autres?

32
drewm

J'ai réussi à obtenir un accès FTP sur le serveur du client, ce qui m'a permis de localiser le problème.

Une fois le formulaire posté, j'authentifie l'utilisateur, puis je le redirige vers la partie principale de l'application.

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

L'erreur se produisait non pas sur l'affichage du formulaire, mais sur la redirection qui le suivait immédiatement. Pour une raison quelconque, IIS continuait à présumer de la méthode POST pour la redirection, puis s'opposait à POST] à /apps/content en tant que répertoire.

Le message d'erreur n'a jamais indiqué que c'était la page suivante qui générait l'erreur - merci Microsoft!

La solution consistait à ajouter un slash final:

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

IIS pourrait alors résoudre la redirection vers un document par défaut, car elle ne tente plus de POST dans un répertoire.

25
drewm

Je déploie des applications VB6 IIS sur mon serveur dédié distant avec 75 dossiers. La raison pour laquelle je recevais cette erreur est que le document par défaut n'a pas été défini sur l'un des dossiers, ce qui est un oubli. L'URL qui a frappé ce dossier ne savait pas quelle page utiliser, et a donc renvoyé l'erreur mentionnée dans ce fil.

7
Boyd White

Les verbes acceptables sont contrôlés dans web.config (situé à la racine du site Web) dans <system.web><httpHandlers> et éventuellement <webServices><protocols>. Web.config sera accessible s'il existe. Il existe également un serveur global.config qui ne le fera probablement pas. Si vous pouvez jeter un oeil à l'un ou l'autre, vous aurez peut-être un indice.

Les verbes acceptables peuvent différer selon les types de contenu. Avez-vous défini des en-têtes de type de contenu dans votre page? (c.-à-d. si votre type de contenu était application/json, alors différents verbes seraient autorisés)

4
Andiih

Avez-vous déjà essayé POST vs post? Cet article de support suggère que cela peut poser des problèmes avec IIS: http://support.Microsoft.com/?id=828726

4
David Carrington

Je ne sais pas pourquoi mais c'est ce qui s'est passé lorsque vous soumettez un formulaire dans une page à lui-même à l'aide de la méthode POST.

Changez donc le method="post" en method="get" ou supprimez le action="anyThings.any" de votre balise <form>.

2
Bobby

je devais changer le POST de mon formulaire en un GET. Je faisais juste un post de démonstration sur une page html, sur un site de test Azure. lisez ceci pour info: http://support.Microsoft.com/kb/942051

0
captainhero70

Nous venons de rencontrer le même problème. Notre Cpanel a été étendu de PHP uniquement à PHP et à .NET et a été remplacé par défaut à .NET.

Connectez-vous à votre Cpanel et assurez-vous de ne pas avoir le même problème. 

0
Sam Monem

Comme Drewm lui-même l'a dit, cela est dû à la redirection ultérieure après que le POST vers le script ait effectivement réussi. (J'aurais peut-être ajouté cela en tant que commentaire à sa réponse, mais vous avez besoin de 50 points de réputation pour commenter et je suis nouveau round ici - daft rule IMHO)

MAIS cela s’applique également si vous essayez de rediriger des pages vers une page, pas seulement un répertoire - du moins cela m’a été utile. J'essayais de rediriger vers /thankyou.html. Ce qui résout ce problème en utilisant une URL absolue, c'est-à-dire http://example.com/thankyou.html

0
Doug McLean

J'ai eu ce problème avec une application facebook que je développais pour un onglet de page fan. Si quelqu'un fait face à ce problème avec une application facebook, alors 

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

2-sélectionnez l'application que vous développez

3-Assurez-vous que tout le lien vers votre application a un slash / 

mon problème se trouvait dans la https: //developers.facebook.com- > Applications-> MYAPPNAME-> paramètres-> onglet de page-> URL de l'onglet de page sécurisée, URL de modification de l'onglet de page, URL de l'onglet de page. J'espère que cela aidera

0
Waqleh

Il semble que le serveur rencontre des difficultés pour traiter les demandes POST (les commandes get et post sont des verbes). Je ne sais pas comment et pourquoi quelqu'un configurerait un serveur pour ignorer les demandes de publication, mais la seule solution serait de réparer le serveur ou de modifier votre application pour qu'elle utilise les demandes de lecture.

0
mike