Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

GET oder POST, das ist hier die Frage

Geschrieben von: Christoph Wille
Kategorie: ASP Grundlagen

This printed page brought to you by AlphaSierraPapa

Es ist zwar keine Gemütsfrage, aber sehr wohl eine Frage des korrekten Programmierens, vor allem in Zeiten von Proxyservern. Heute widme ich mich den Unterschieden zwischen GET und POST, wann welche Spielart des HTTP Transfers zum Einsatz kommen sollte, und wie man zwischen diesen beiden unterscheiden kann.

Das HTTP GET Kommando

GET ist das am häufigsten verwendete Kommando des Hypertext Transfer Protocols (HTTP) - deshalb, weil jede Nicht-Formularseite von Browsern immer so aufgerufen wird - einfaches eintippen in der Adresszeile, Eingabetaste drücken, und schon wird ein GET Request nach dieser Seite abgesetzt.

Teil des GET Requests sind die Querystrings, die in ASP über die Request.QueryString Collection auslesbar sind. Herausfinden, ob ein Querystring geschickt wurde, kann man am schnellsten folgendermaßen:

If (Len(Request.ServerVariables("QUERY_STRING")) > 0) Then
  ...
End If

Dadurch wird die QueryString Collection nicht initialisiert, man spart also potentiell einiges an Zeit (das Parsing wird bis zum ersten Aufruf der Collection unterbunden).

Was sind die Vorteile oder Nachteile von GET Requests? Nun, GET Requests dürfen von Proxyservern gecacht werden - was sowohl zum Vorteil (geringe Serverlast), als auch zum Nachteil (alte Daten am Client) gereichen kann. Wenn man gar kein Caching haben möchte, muß man es so unterbinden:

Response.Expires = 0
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-control", "no-store"

Abschließend gilt auch, daß man GET als FORM METHOD nicht verwenden soll - ab HTML 4.0 ist GET als METHOD "deprecated", also nicht mehr empfohlen.

Formulare mit POST

Bei Formularen kommt das POST Kommando am öftesten zum Tragen. Eine entsprechendes FORM Tag sieht wie folgt aus:

<FORM METHOD="POST" ACTION="myFormHandler.asp">
...
</FORM>

GePOSTete Formulare und solche Zielseiten werden von Proxyservern nicht mehr gecacht. Dies spiegelt sich auch in ASP.NET's OutputCache Direktive wider, die standardmäßig nur GET Seiten cacht.

Wie merke ich also, ob eine Seite gepostet wurde? Das folgende Codesnippet zeigt's:

If (UCase(Request.ServerVariables("HTTP_METHOD")) = "POST") Then
   ...
End If

Das war die sichere Methode, um das Kommando ganz genau zu wissen. Wenn man nur interessiert ist, ob Parameter gepostet wurden, macht man es so:

If (Request.ServerVariables("CONTENT_LENGTH") > 0) Then
  ...
End If

Wichtig ist nur, daß CONTENT_LENGTH ohne übergebene Parameter auch leer ist, man also irrtümlich glauben könnte, es war kein POST Request. Das Auslesen der Parameter sollte man dann natürlich bequemerweise über die Request.Form Collection abwickeln.

Schlußbemerkung

Die Quintessenz des heutigen Artikels ist, daß Formulare immer mit POST abgeschickt werden sollten, außer man möchte unter Umständen ein Cachingverhalten via GET erhalten.

This printed page brought to you by AlphaSierraPapa

Verwandte Artikel

Dynamische Stylesheets
http:/www.aspheute.com/artikel/20010306.htm
Mitlauschen bei der Browser-Webserver Kommunikation
http:/www.aspheute.com/artikel/20020305.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.