Qu'est-ce qui provoque une erreur HTTP 405 " invalid method (HTTP verb)" lors de la publication d'un formulaire sur PHP sur IIS?
J'ai un formulaire dans une application PHP (5.2.9-1) qui provoque IIS (Microsoft-IIS / 6.0) pour lancer l'erreur suivante lors de la publication:
La page que vous recherchez ne peut pas être affichée car une méthode non valide (HTTP verb) a été utilisée pour tenter l'accès.
C'est un code D'état HTTP 405. Toutes les autres formes dans l'application fonctionnent, donc je crois que le paramètre 'verbes' D'IIS pour les pages PHP est correct.
C'est le serveur d'un client, auquel je n'ai pas accès pour vérification des paramètres ou code de test. Tout ce que je peux faire est d'envoyer les fichiers de remplacement des clients. Les autres clients sur les serveurs IIS n'ont pas un tel problème.
Le formulaire est parfaitement simple:
<form method="post" action="index.php">
... fields ...
</form>
Qu'est-ce qui peut amener IIS à lancer cette erreur sur un seul formulaire, mais fonctionne bien sur d'autres?
11 réponses
J'ai réussi à obtenir un accès FTP au serveur du client et j'ai donc pu retrouver le problème.
Après la publication du formulaire, j'authentifie l'utilisateur, puis je le redirige vers la partie principale de l'application.
Util::redirect('/apps/content');
L'erreur ne se produisait pas lors de l'affichage du formulaire, mais lors de la redirection qui le suivait immédiatement. Pour une raison quelconque, IIS continuait à présumer la méthode POST pour la redirection, puis s'opposait au POST à /apps/content
car c'est un répertoire.
L'erreur le message n'a jamais indiqué que c'était la page suivante qui générait l'erreur-merci Microsoft!
La solution était d'ajouter une barre oblique de fin:
Util::redirect('/apps/content/');
IIS pourrait alors résoudre la redirection vers un document par défaut car il ne tente plus de publier dans un répertoire.
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, un oubli, de sorte que l'URL frappant ce dossier ne savait pas quelle page serveur, et a donc jeté l'erreur mentionnée dans ce fil.
Par hasard avez-vous essayé POST vs post? Cet article de support suggère qu'il peut causer des problèmes avec IIS: http://support.microsoft.com/?id=828726
Les verbes acceptables sont contrôlés dans web.config (trouvé à la racine du site) dans {[0] } et éventuellement <webServices><protocols>
. Web.config vous sera accessible si elle existe. Il y a aussi un serveur global.config qui ne le sera probablement pas. si vous pouvez regarder l'un ou l'autre de ceux-ci, vous pouvez obtenir un indice.
Les verbes acceptables peuvent différer avec les types de contenu - avez-vous défini des en-têtes Content-type dans votre page ? (c'est-à-dire si votre type de contenu était application / json, alors différents verbes seraient autorisé)
Je ne sais pas pourquoi mais c'est arrivé lorsque vous soumettez un formulaire à l'intérieur d'une page par la méthode POST
.
Changez donc method="post"
en method="get"
ou supprimez action="anyThings.any"
de votre balise <form>
.
Il semble que le serveur ait du mal à gérer les requêtes POST (get et post sont des verbes). Je ne sais pas, comment ou pourquoi quelqu'un configurerait un serveur pour ignorer les requêtes post, mais la seule solution serait de réparer le serveur ou de changer votre application pour utiliser les requêtes get.
J'ai eu ce problème avec une application facebook que je développais pour un onglet fan page. 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 tous les liens vers votre application ont une barre oblique/
Mon problème était dans le https://developers.facebook.com- > Apps - > MYAPPNAME - > Paramètres - > onglet Page - > onglet page sécurisée URL, onglet Page modifier URL, onglet Page URL j'espère que cela aidera
Comme drewm lui-même l'a dit, cela est dû à la redirection ultérieure après que le POST vers le script ait réussi. (J'ai peut-être ajouté ceci en tant que commentaire à sa réponse, mais vous avez besoin de 50 réputation pour commenter et je suis nouveau tour ici - règle daft IMHO)
Mais cela s'applique également si vous essayez de rediriger vers une page, pas seulement un répertoire - du moins pour moi. J'ai essayé de rediriger vers /thankyou.HTML. Qu'est-ce qui résout cela en utilisant une URL absolue, c'est-à-dire http://example.com/thankyou.html
J'ai dû changer le POST de mon formulaire en GET. je faisais juste un post de démonstration sur une page html, sur un site test azure. lire ceci pour plus d'infos: http://support.microsoft.com/kb/942051
Nous venons de rencontrer ce même problème. Notre Cpanel est passé de PHP seulement à PHP et. NET et par défaut à. NET.
Connectez-vous à Cpanel et assurez-vous que vous n'avez pas le même problème.
Une cause supplémentaire possible.
Ma page HTML avait ces balises de départ:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
C'était sur une page qui utilisait le diaporama jQuery slick.
J'ai supprimé les balises et remplacé par:
<html>
Et tout fonctionne à nouveau.