HTTP GET und POST

Gast #6373686
Ich weiß nicht, ob das das richtige Forum für meine Frage ist, aber ein 
Versuch ist es wert.

Es geht um die HTTP-Anfragemethoden GET, POST usw.

Angenommen ein Kunde schickt mit mit einem HTML-Formular und der 
POST-Methode eine Pizzabestellung zu einer PHP-Datei namens 
verarbeitung.php, die auf dem Webserver des Pizza-Bäckers liegt. DDort 
werden die Daten in der besagten PHP-Datei mit der $_POST-Variable 
abgefangen und zur Übersicht nochmal ausgegeben.

Dank der Ausgabe werden dem Kunden ja gleich nach dem Abschicken noch 
einmal alle Bestelldetails angezeigt.

Nun habe ich einen inneren Konflikt. Wie bekommt der Kunde die Ausgabe 
aus der verarbeitung.php überhaupt angezeigt? Er hat ja schließlich nur 
die POST-Methode verwendet und die erstellt in erster Linie eine neue 
Ressource. Er hat die Datei verarbeitung.php nicht explizit mit GET 
angefragt.

Wer kann mir dieses Rätsel lösen?
Gast #6373719
GET und POST sind nur Methoden, wie man per HTML Formular-Daten "<form 
method="GET">" oder "<form method="POST">"überträgt.
Wenn man Daten per GET überträgt, sieht man sie in der Adresszeile,
bei POST eerden sie nicht so angezeigt und  können auch größer sein 
(Bilder oder andere Daten auf den Webserver hochladen).
Gast #6373722
Mutti schrieb:
> Wie bekommt der Kunde die Ausgabe aus der verarbeitung.php überhaupt
> angezeigt?

In dem sein Browser die Seite wechselt, auf eine Seite in der die 
Ergebnisse des Post eingearbeitet sind.

Es sei denn, er SOLL gar nichts mitbekommen.
Gast #6373726
MaWin schrieb:
> In dem sein Browser die Seite wechselt, auf eine Seite in der die
> Ergebnisse des Post eingearbeitet sind.

Aber laut Definition, fordert POST keine neue Ressource an. Das wäre 
dann ja ein POST in Kombination mit einem GET. Erst übermitteln, dann 
anzeigen.
Gast #6373729
Mutti schrieb:
> Wie bekommt der Kunde die Ausgabe aus der verarbeitung.php überhaupt
> angezeigt? Er hat ja schließlich nur die POST-Methode verwendet und die
> erstellt in erster Linie eine neue Ressource.

Genau da ist der Denkfehler, POST ist keine Einbahnstrasse. Der Client 
bekommt auch dann genau wie beim GET eine Antwort geschickt.
Gast #6373741
Mutti schrieb:
> Aber laut Definition, fordert POST keine neue Ressource an. Das wäre
> dann ja ein POST in Kombination mit einem GET. Erst übermitteln, dann
> anzeigen.

Jetzt hat mein (selbstprogrammiertes) Lagerdatensystem ein Problem.
Gast #6373759
Hmmm schrieb:
> Da geht es um REST-APIs, nicht um HTTP allgemein.
 Das sollte keinen Unterschied machen. Schau die mal die Definition der 
HTTP-POST-Methode auf Wikipedia an, da wird auch nicht erwähnt, dass zu 
einer anderen Seite umgeleite wird.
Gast #6373792
Der Unterschied zwischen GET und POST ist sehr schön im RFC2616 zu 
HTTP/1.1 unter Abschnitt 9 erläutert.

POST soll zwar nur übermitteln, d.h. aber nicht, dass nach erfolgreicher 
Übermittlung nicht beispielsweise auf eine andere Seite weitergeleitet 
wird, die dann das Ergebnis anzeigt oder bei einem Fehler eine 
Fehlermeldung. Jedes Webforum wird auf diese Weise funktionieren. 
Übrigens auch dieses Formular hier.

POST ist übrigens heute datenschutztechnisch in vielen Fällen zu 
bevorzugen, in denen auch GET ausreichen würde. Eben weil die Parameter 
nicht mehr in der URL stehen.
Gast #6373854
FS schrieb:
> POST soll zwar nur übermitteln, d.h. aber nicht, dass nach erfolgreicher
> Übermittlung nicht beispielsweise auf eine andere Seite weitergeleitet
> wird

Das ist ja richtig. Ich stelle die Frage ja nicht ohne Grund. Ich habe 
eine beispielhafte Pizza-Bestellung mit PHP programmiert, eine 
Bestellung  (POST) abgeschickt und mit mit Firefox die HTTP-Header der 
Response und Requests ausgewertet. Es ist darin kein Feld (z. B. 
Location) enthalten, das auf die Ressource verweist, an die ich die 
Daten gesendet habe, dennoch wird zu der Ressource weitergeleitet.

Wie und warum?
#6373894
Mutti schrieb:
> FS schrieb:
>> POST soll zwar nur übermitteln, d.h. aber nicht, dass nach erfolgreicher
>> Übermittlung nicht beispielsweise auf eine andere Seite weitergeleitet
>> wird
>
> Das ist ja richtig. Ich stelle die Frage ja nicht ohne Grund. Ich habe
> eine beispielhafte Pizza-Bestellung mit PHP programmiert, eine
> Bestellung  (POST) abgeschickt und mit mit Firefox die HTTP-Header der
> Response und Requests ausgewertet. Es ist darin kein Feld (z. B.
> Location) enthalten, das auf die Ressource verweist, an die ich die
> Daten gesendet habe, dennoch wird zu der Ressource weitergeleitet.
>
> Wie und warum?

wegen dem <form action='xy.php' method='post'>
Gast #6373967
Mutti schrieb:
> Es ist darin kein Feld (z. B.
> Location) enthalten, das auf die Ressource verweist, an die ich die
> Daten gesendet habe, dennoch wird zu der Ressource weitergeleitet.

Was faselst Du da dauernd von "Ressourcen", an die "weitergeleitet" 
wird? Guck Dir doch einfach mal in der Developer Console den 
Datentransfer an.

In einem <form> steht entweder ein "action"-Parameter, oder es wird 
implizit die URL genommen, von der das Form stammt.

Der Browser schickt dann (bei method="POST") einen POST-Request und 
zeigt - sofern vorhanden - den zurückgelieferten Content an. Falls kein 
Content, sondern ein Location-Header zurückkommt, wird der Content von 
da genommen.
Gast #6374187
in einem php Ablauf wird in einem Durchlauf eine (!) Seite aufgebaut.
Deswegen :

1) auswerten der Uebergabe parameter isset($GET()), resp isset($POST())
2) noetige Aktionen, zB Datenbank zugriffe
3) Aufbauen und Anzeigen der neuen Seite echo()

Die dem Clienten/Browser gelieferte Webseite hat den Aufbau
<html> header ..
<body>
<form action=neue seite method=post>...</form>
</body>
</html>

Der unterschied zwischen GET und POST ist, dass der GET Parameter in der 
Kommunikation sichtbar ist, der POST parameter nicht. Sichtbar bedeutet 
hier allenfalls verschluesselt.
Auf GET Parameter kann man Links setzen, auf POST nicht. Bedeutet man 
kann eine Website voll unter ./index.php laufen lassen, verunmoeglicht 
dann allerdings Links auf Funktionalitaet und zwingt den Benutzer sich 
jedes mal durch alles durchzuclicken. Das sollte man nicht, kommt 
schlecht an. Speziell wenn die Navigation unuebersichtlich ist.
Gast #6374209
@Gret

D.h., es existiert kein separates Header-Feld im HTTP-Header, in dem 
eine URL steht, die angezeigt wird, nachdem man den POST-Request 
ausgelöst hat.

Will sagen, der reine HTTP-Header eines POST-Request enthält keine 
Weiterleitung?
Gast #6374221
Mutti schrieb:
> Will sagen, der reine HTTP-Header eines POST-Request enthält keine
> Weiterleitung

Die Weiterleitung steht doch nicht im Request woher soll der den wissen 
wohin es weiter geht, sondern in der Response Antwort.

Entweder ein einfaches 200 (ok) oder 201 (Weiterleitung zu URL soundso) 
oder Fehler.
Gast #6374223
Mutti schrieb:
> D.h., es existiert kein separates Header-Feld im HTTP-Header, in dem
> eine URL steht, die angezeigt wird, nachdem man den POST-Request
> ausgelöst hat.

Liest Du eigentlich auch mal, was man Dir schreibt? Ich schrieb Dir 
schon vor Stunden:

Hmmm schrieb:
> Genau da ist der Denkfehler, POST ist keine Einbahnstrasse. Der Client
> bekommt auch dann genau wie beim GET eine Antwort geschickt.

Die Antwort auf einen HTTP-POST-Request unterscheidet sich nicht von 
einer Antwort auf einen HTTP-GET-Request, in beiden Fällen KANN (nicht 
muss) ein Location-Header dafür sorgen, dass der Content von woanders 
geholt wird, ansonsten zeigt der Browser das an, was vom Server 
zurückkommt.

Einen POST-Request mit einem Redirect zu beantworten, hat ein paar 
Vorteile, insbesondere funktioniert dann wieder der Back-Button des 
Browsers, ohne dass der Browser den POST-Request wegen des ausbleibenden 
Cachings nochmal schicken will.
#6374564
Gret schrieb:
> Der unterschied zwischen GET und POST ist, dass der GET Parameter in der
> Kommunikation sichtbar ist, der POST parameter nicht. Sichtbar bedeutet
> hier allenfalls verschluesselt.
> Auf GET Parameter kann man Links setzen, auf POST nicht. Bedeutet man
> kann eine Website voll unter ./index.php laufen lassen, verunmoeglicht
> dann allerdings Links auf Funktionalitaet und zwingt den Benutzer sich
> jedes mal durch alles durchzuclicken. Das sollte man nicht, kommt
> schlecht an. Speziell wenn die Navigation unuebersichtlich ist.

Wobei Landingpages mit Parametern was SEO angeht eher schlecht sind, da 
biegt man per htaccess die HTML auf die index.php um und zerlegt die 
"sprechende" URL. läuft technisch aufs Gleiche raus (Auslieferung eines 
bestimmten Inhalts), schaut aber besser aus bei der Verlinkung.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.