2008-11-04 7 views
9

Ist es zulässig, Parameter über die URL (nach dem Fragezeichen) an eine Webseite zu übergeben, wenn die POST-Methode verwendet wird? Ich weiß, dass es funktioniert (die meiste Zeit sowieso), weil die Webapplikation meines Unternehmens es oft tut, aber ich weiß nicht, ob es tatsächlich im Standard unterstützt wird oder ob ich mich auf dieses Verhalten verlassen kann. Ich überlege, einen SOAP-Request-Handler zu implementieren, der nach dem Fragezeichen einen Parameter verwendet, um anzuzeigen, dass es sich um eine SOAP-Anfrage und nicht um eine normale HTTP-Anfrage handelt. Der Grund dafür ist, dass die Webanwendung eine IIS-Erweiterung ist, so dass über die gleiche URL (z. B. example.com/myisapi.dll?command) auf alle zugegriffen wird. Um also die SOAP-Anfrage zu bearbeiten, muss ich Folgendes angeben: Befehl "Parameter. Es würde einen allgemeinen Befehl für SOAP geben, nicht einen spezifischen Befehl für jede SOAP-Aktion - diese würden in der SOAP-Anfrage selbst spezifiziert werden.Übergeben von Parametern in der URL bei Verwendung von HTTP POST

Grundsätzlich versuche ich die Apache Axis2/C-Bibliothek in meine Webanwendung zu integrieren, indem ich die Webanwendung die HTTP-Anfrage behandeln lasse und dann die eingehende SOAP-XML an Axis2 zur Verarbeitung übergebe, wenn es eine SOAP-Anfrage ist. Intuitiv kann ich keinen Grund sehen, warum das nicht funktionieren würde, da die URL, auf die du poste, nur eine beliebige URL ist, was die verschiedenen Komponenten betrifft ... es ist der Server, der eine besondere Bedeutung verleiht die Teile nach dem Fragezeichen.

Danke für jede Hilfe/Einsicht, die Sie zur Verfügung stellen können.

Antwort

6

Beginnen wir mit den einfachen Sachen. HTTP-GET-Anforderungsvariablen stammen aus dem URI. Der URI ist eine angeforderte Ressource und jeder Webserver sollte (und Apache) den gesamten URI, der in einer Variablen gespeichert ist, den Modulen oder Anwendungsserverkomponenten zur Verfügung stellen, die auf dem Webserver laufen.

Ein HTTP-POST, der sich von einem HTTP-GET unterscheidet, ist ein separater logischer Aufruf an den Webserver, definiert aber immer noch einen URI, der den Post verarbeiten soll.Ein guter Webserver (Apache ist einer) stellt den URI wieder für alle Module oder Anwendungsserver bereit, die darin laufen, und stellt dann zusätzlich die Variablen zur Verfügung, die in den POST-Headern gesendet wurden.

An dem Punkt, an dem Ihre Anwendung während eines POST die Kontrolle über Apache übernimmt, sollten Sie Zugriff auf die GET- und POST-Variablen haben und die von Ihnen gewünschte Steuerungslogik ausführen können, einschließlich der Beantwortung eines SOAP-Protokolls anstelle von HTML.

3

Wenn Sie fragen, ob es möglich ist, Parameter über GET und POST in einer einzigen HTTP-Anfrage zu senden, lautet die Antwort "JA". Dies ist eine Standardfunktionalität, die zuverlässig AFAIK verwendet werden kann. Ein solches Beispiel ist das Senden von Authentifizierungsdaten in zwei Teilen, einen über GET und den anderen über POST, so dass jeder Versuch, eine Sitzung zu entführen, ein Hijacking sowohl der GET- als auch der POST-Variablen erfordern würde.

In Ihrem Fall können Sie POST verwenden, um die eigentliche SOAP-Anfrage zu enthalten, aber auf der Basis des in GET übergebenen Parameters (oder durch die URL) testen, ob es sich um eine SOAP-Anfrage handelt.

+0

Ich weiß, dies ist ein wirklich alter Beitrag, aber manchmal bei der Authentifizierung, Anmeldeinformationen müssen nicht in der Anfrage enthalten sein uri [link] (https://tools.ietf.org/html/rfc6749#section-2.3.1) . Immer noch versuchen herauszufinden, warum ... – martin

2

Ich habe eine Webanwendung mit 3 (einem Mobilfunknetzbetreiber) in Großbritannien eingesetzt. Es verwendete ursprünglich POST-Parameter, aber das 3-Gateway entfernte sie (und X-Header auch!). Also Vorsicht ...

2

zulässig? Sicher, es ist machbar, aber ich lehne mich an die Spezifikation, was darauf hindeutet, dass duale Methoden nicht unbedingt passieren sollten oder unterstützt werden. RFC2616 definiert HTTP/1.1, und ich würde vorschlagen, schlägt nur eine Methode pro Anfrage vor. wenn Sie über Ihre typische HTTP-Transaktion von der Client-Seite denken, können Sie die Einschränkung siehe auch:

$ telnet localhost 80 
POST /page.html?id=5 HTTP/1.1 
host: localhost 

wie Sie sehen können, können Sie nur eine Methode verwenden (POST/GET, etc ...), Aufgrund der Art und Weise, wie verschiedene Sprachen arbeiten, können sie jedoch die Abfragezeichenfolge übernehmen und sie der GET-Variablen zuweisen. Letztendlich ist dies jedoch eine POST-Anfrage und keine GET.

so im Grunde, ja diese Funktionalität existiert, ist es beabsichtigt? Ich würde sagen keine.

+0

Ihr Beispiel ist genau das, worüber ich spreche ... eine POST-Anfrage, bei der die URL einige Parameter nach dem Fragezeichen enthält. Es wäre Aufgabe des Servers festzustellen, ob es funktioniert, oder nicht? Wenn ja, weiß ich, dass es auf IIS funktioniert, also kann ich mich darauf verlassen, oder? – rmeador

+0

@Owen: Niemand hat vorgeschlagen, zwei Methoden zu haben, soweit ich sehen kann - nur mit Parametern auf der POST-URL. Daran ist nichts falsch. –

+0

@Jon: Ja, ich stimme zu. @ rmeador: Ich denke, die Verwirrung kann sein, wer was behandelt. dh, der Server behandelt die Methode (POST/GET), die Sprache behandelt das Parsen des Suchteils einer URL (separates Anliegen). Solange Ihre * Sprache * dies unterstützt, sollte dies kein Problem darstellen. – Owen

3

Ich glaube, dass kein Standard tatsächlich das Konzept von "HTTP-Parameter" oder "Anfragevariablen" definiert. RFC 1738 definiert, dass eine URL einen "Suchteil" haben kann, der die Teilzeichenfolge nach dem Fragezeichen darstellt. HTML legt im Formularübermittlungsprotokoll fest, wie ein Browser, der ein FORM-Element verarbeitet, es übermitteln sollte. In beiden Fällen ist die Art und Weise, wie serverseitig der Suchteil und der HTTP-Körper verarbeitet werden, vollständig dem Server überlassen - beide zu verwerfen würde diesen beiden Spezifikationen entsprechen (aber ziemlich nutzlos).

Um zu ermitteln, ob Sie einen Suchteil an einen bestimmten Dienst senden können, müssen Sie die Protokollspezifikation dieses Dienstes lesen. Wenn der Service praktisch über ein HTML-Formular definiert ist, können Sie keine Mischung verwenden. Sie können nicht einmal POST verwenden, wenn FORM GET angibt (und umgekehrt). Wenn Sie einen Webdienst bereitstellen, müssen Sie sich die WSDL des Webdienstes ansehen, die normalerweise POST anweist. mit allen Daten in einer SOAP-Nachricht. Etc.

Spezifische Web-Frameworks können den Begriff "Anfragevariablen" haben - ob sie diese Variablen sowohl aus einem Suchteil als auch aus einem Anfragetext ziehen, müssen Sie in der Produktdokumentation herausfinden.

Verwandte Themen