GET oder POST, das ist hier die Frage
Geschrieben von: Christoph Wille 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 KommandoGET 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 POSTBei 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ßbemerkungDie 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. Verwandte Artikel
Dynamische Stylesheets Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |