it-swarm.com.de

Was verursacht einen HTTP 405-Fehler "Ungültige Methode (HTTP-Verb)" beim POST eines Formulars in PHP auf IIS?

Ich habe ein Formular in einer PHP (5.2.9-1) -Anwendung, das dazu führt, dass IIS (Microsoft-IIS/6.0) beim POSTEN den folgenden Fehler ausgibt:

Die von Ihnen gesuchte Seite kann nicht angezeigt werden, da eine ungültige Methode (HTTP-Verb) für den Zugriffsversuch verwendet wurde.

Es ist ein HTTP 405-Statuscode. Alle anderen Formulare in der Anwendung funktionieren, daher glaube ich, dass die Einstellung der IIS 'Verben' für PHP Seiten korrekt ist.

Dies ist der Server eines Kunden, auf den ich keinen Zugriff habe, um Einstellungen zu überprüfen oder Code zu testen. Ich kann nur die Kundenersatzdateien senden. Andere Kunden auf IIS -Servern haben kein solches Problem.

Die Form ist absolut unkompliziert:

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

Was kann dazu führen, dass IIS diesen Fehler nur in einer Form auslöst, in anderen jedoch einwandfrei funktioniert?

32
drewm

Es gelang mir, FTP-Zugriff auf den Server des Kunden zu erhalten, und so konnte ich das Problem aufspüren.

Nach dem POST des Formulars authentifiziere ich den Benutzer und leite dann zum Hauptteil der App weiter.

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

Der Fehler trat nicht bei der Veröffentlichung des Formulars auf, sondern bei der unmittelbar darauf folgenden Weiterleitung. Aus irgendeinem Grund nahm IIS weiterhin die Methode POST für die Weiterleitung an und wandte sich dann an POST an /apps/content, da es ein Verzeichnis ist.

Die Fehlermeldung zeigte nie an, dass die folgende Seite den Fehler generiert hat - danke Microsoft!

Die Lösung bestand darin, einen nachstehenden Schrägstrich hinzuzufügen:

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

IIS könnte dann die Weiterleitung in ein Standarddokument auflösen, da nicht mehr versucht wird, POST in ein Verzeichnis zu verschieben.

25
drewm

Ich stelle VB6 IIS -Anwendungen auf meinem dedizierten Remote-Server mit 75 Ordnern bereit. Der Grund, warum ich diesen Fehler erhielt, ist, dass das Standarddokument nicht in einem der Ordner festgelegt wurde. Dies ist ein Versehen, sodass die URL, die diesen Ordner anschlug, nicht wusste, auf welcher Seite der Server abgelegt werden sollte, und der in diesem Thread erwähnte Fehler ausgelöst wurde.

7
Boyd White

Die akzeptablen Verben werden in web.config (im Stammverzeichnis der Website) in <system.web><httpHandlers> und möglicherweise <webServices><protocols> gesteuert. Auf Web.config können Sie zugreifen, wenn es vorhanden ist. Es gibt auch eine globale server.config, die wahrscheinlich nicht funktioniert. Wenn Sie einen Blick auf eines davon werfen können, erhalten Sie möglicherweise einen Hinweis.

Die akzeptablen Verben können sich je nach Inhaltstyp unterscheiden. Haben Sie auf Ihrer Seite überhaupt Content-Typ-Header festgelegt? (d. h. wenn Ihr Content-Typ application/json wäre, wären andere Verben zulässig.)

4
Andiih

Haben Sie es aus irgendeinem Grund versucht POST vs post? In diesem Support-Artikel wird vorgeschlagen, dass Probleme mit IIS auftreten können: http://support.Microsoft.com/?id=828726

4

Ich weiß nicht warum, aber es ist passiert, wenn Sie ein Formular innerhalb einer Seite mit der POST-Methode an sich selbst senden.

Ändern Sie also den method="post" in method="get" oder entfernen Sie action="anyThings.any" aus Ihrem <form>-Tag.

2
Bobby

ich musste POST meiner Form in ein GET ändern. Ich habe gerade einen Demo-Post auf einer HTML-Seite auf einer Azure-Test-Site erstellt. Lesen Sie dies für Informationen: http://support.Microsoft.com/kb/942051

0
captainhero70

Wir sind gerade auf dieselbe Ausgabe gestoßen. Unser Cpanel hat sich von PHP nur auf PHP und .NET erweitert und ist standardmäßig auf .NET eingestellt.

Melden Sie sich bei Ihrem Cpanel an und stellen Sie sicher, dass Sie nicht dasselbe Problem haben. 

0
Sam Monem

Wie Drewm selbst sagte, liegt dies an der nachfolgenden Umleitung, nachdem der POST zum Skript tatsächlich erfolgreich war. (Ich habe dies vielleicht als Kommentar zu seiner Antwort hinzugefügt, aber Sie benötigen 50 Ruf, um etwas zu kommentieren, und ich bin hier neu - daft rule IMHO)

ABER es gilt auch, wenn Sie versuchen, auf eine Seite umzuleiten, nicht nur auf ein Verzeichnis - zumindest für mich. Ich habe versucht nach /thankyou.html umzuleiten. Zur Behebung dieses Problems wird eine absolute URL verwendet, d. H. http://example.com/thankyou.html

0
Doug McLean

Ich hatte dieses Problem mit einer Facebook-Anwendung, die ich für eine Fanpage-Registerkarte entwickelte. Wenn jemand dieses Problem mit einer Facebook-Anwendung hat, dann 

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

2 Wählen Sie die Anwendung aus, die Sie entwickeln

3 Stellen Sie sicher, dass alle Links zu Ihrer Anwendung einen Schrägstrich / haben. 

mein Problem war in https: //developers.facebook.com - > Apps-> MYAPPNAME-> Einstellungen-> Registerkarte Seiten-> Sichere Seite Registerkarte URL, Seite Registerkarte URL bearbeiten, URL Seite __ das wird helfen

0
Waqleh

Es hört sich an, als ob der Server Probleme hat, POST -Anfragen zu behandeln (Get und Post sind Verben). Ich weiß nicht, wie oder warum jemand einen Server so konfiguriert hat, dass er Post-Anforderungen ignoriert. Die einzige Lösung wäre, den Server zu reparieren oder die App so zu ändern, dass Get-Anfragen verwendet werden.

0
mike