Formular, Selbstverweis, wird Seite komplett neu geladen??
Björn
- html
Hallo,
mal eine Frage, wird eine Seite bei Formularversand eigentlich komplett neu geladen wenn sie auf sich selbst verweist???
Sieht fast so aus...(aber eben nur fast)
danke
Björn
Hi,
mal eine Frage, wird eine Seite bei Formularversand eigentlich komplett neu geladen wenn sie auf sich selbst verweist???
Sieht fast so aus...(aber eben nur fast)
eine Seite wird dann neu geladen, wenn der Browser seinen Cache nicht verwenden kann oder will. Im Falle eines Formulars - welches i.d.R. mit Eingabefeldern bestückt ist - wird sich insbesondere die Request-URL ändern (bzw. die POST-Parameter), so dass ein Caching völlig unmöglich ist; es sei denn, exakt das selbe Parameterset wurde vom Browser bereits früher angefordert. Auch dann ist ein Caching aber eher unwahrscheinlich.
Cheatah
Moin,
eine Seite wird dann neu geladen, wenn der Browser seinen Cache nicht verwenden kann oder will. Im Falle eines Formulars - welches i.d.R. mit Eingabefeldern bestückt ist - wird sich insbesondere die Request-URL ändern (bzw. die POST-Parameter), so dass ein Caching völlig unmöglich ist
Björn: Wenn du also ein serverseitiges Script hast das einfach eine Menge Datensätze hintereinander aufnehmen soll, ohne das sich das Formular ändert und du nicht willst, dass der Browser das Formular ständig neu lädt, verwende den 205-Status.
Hi,
- Sonderfälle auf HTTP-Ebene: 205 Reset Content ist zum Beispiel ausdrücklich für den Zweck gedacht, damit der Browser das Formular nicht neu lädt, sondern nur die Inhalte zurücksetzt. 204 No Content dürfte einen ähnlichen Effekt ohne Zurücksetzen haben.
nun, auch für diese Fälle muss der Client zunächst die Ressource neu anfordern. Dass das Ergebnis korrekt interpretiert wird, setze ich voraus.
Cheatah
Björn: Wenn du also ein serverseitiges Script hast das einfach eine Menge Datensätze hintereinander aufnehmen soll, ohne das sich das Formular ändert und du nicht willst, dass der Browser das Formular ständig neu lädt, verwende den 205-Status.
klingt interessant!
wo geb ich das an, im Script(php) im Html ??
gr.
Björn
Moin,
wo geb ich das an, im Script(php) im Html ??
Theoretisch sollte es in PHP ein
header("HTTP/1.1 205 Reset Content"); // Status senden
header("Content-Length: 0"); // Die Antwort darf keinen Body enthalten
die(); // Skript daher beenden
tun, an einer Stelle an der dein Skript seine Aufgabe erfolgreich erledigt hat und es noch keine Ausgabe gab.
Ich merke jedoch grade, dass hier die Browser größtenteils kaputt sind: Mozilla und IE zeigen eine leere Seite an und Opera wartet ewig auf irgendwas.
Anscheinend ist "This response is primarily intended to allow input for actions to take place via user input, followed by a clearing of the form in which the input is given so that the user can easily initiate another input action." nicht so unmissverständlich wie ich zunächst dachte.
Alternativ wäre da noch "204 No Content" anzubieten. Dabei wird ebenfalls kein Body übertragen und der Browser muß laut Standard ausdrücklich die aktuelle Ansicht so lassen wie sie ist, das Formular wird also nicht zurückgesetzt. Das schaffen immerhin Mozilla und Opera problemlos, hier wartet der IE allerdings jetzt ewig auf irgendwas.
Hi,
Ich merke jedoch grade, dass hier die Browser größtenteils kaputt sind: Mozilla und IE zeigen eine leere Seite an und Opera wartet ewig auf irgendwas.
bist Du Dir sicher, dass Dein Header _allein_ gesendet wurde? Hast Du das ganze irgendwo online?
Cheatah
Moin,
bist Du Dir sicher, dass Dein Header _allein_ gesendet wurde?
Dank Ethereal ziemlich sicher, ja.
Hast Du das ganze irgendwo online?
Jetzt ja: http://ploetzli.ch/forumtst/resettest.php (der Sourcecode ist http://ploetzli.ch/forumtst/resettest.phps)
Hi,
bist Du Dir sicher, dass Dein Header _allein_ gesendet wurde?
Dank Ethereal ziemlich sicher, ja.
also, ich sehe z.B. noch einen Content-Type ;-)
RFC 2616 sagt zu 205:
"""
10.2.6 205 Reset Content
[...] The response MUST NOT include an entity.
"""
Eine entity wird dort definiert als:
"""
7 Entity
[...] An entity
consists of entity-header fields and an entity-body, although some
responses will only include the entity-headers.
7.1 Entity Header Fields
[...]
entity-header = Allow ; Section 14.7
| Content-Encoding ; Section 14.11
| Content-Language ; Section 14.12
| Content-Length ; Section 14.13
| Content-Location ; Section 14.14
| Content-MD5 ; Section 14.15
| Content-Range ; Section 14.16
| Content-Type ; Section 14.17
| Expires ; Section 14.21
| Last-Modified ; Section 14.29
| extension-header
[...]
"""
Ergo: Verbotenerweise hast Du eine Entity mitgeliefert. Ich stimme zwar zu, dass es ein wenig schwach ist, wenn Mozilla sich davon beeinflussen lässt; als falsch lässt sich sein Verhalten aber IMHO nicht bezeichnen.
Cheatah
Moin,
Ergo: Verbotenerweise hast Du eine Entity mitgeliefert. Ich stimme zwar zu, dass es ein wenig schwach ist, wenn Mozilla sich davon beeinflussen lässt; als falsch lässt sich sein Verhalten aber IMHO nicht bezeichnen.
Hmm, da scheinst du Recht zu haben. Mir war diese Definition von Entity nicht bewusst. (Das würde auch erklären warum er sich bei 204 korrekt verhält, da dort solche Header explizit erlaubt sind.) Leider lässt sich mit PHP das Senden dieser Header wohl nicht verhindern ... es sei denn (quick'n'dirty):
<?php
define("CRLF", "\015\012");
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if(!$socket) die("socket_create");
if(!socket_bind($socket, "127.0.0.1", 1406)) die("socket_bind");
if(!socket_listen($socket,1)) die("socket_listen");
$fh = socket_accept($socket);
if(!$fh) die("socket_accept");
$msg = "HTTP/1.0 205 Reset Content".CRLF."Connection: Close".CRLF.CRLF;
socket_set_nonblock($fh);
sleep(1);
socket_read($fh, 2048);
socket_write($fh, $msg);
socket_shutdown($fh); socket_shutdown($socket);
?>
Wenn man das vorgenannte Formular minimal modifiziert so dass es auf Port 1406 connected erhält man folgenden HTTP-Traffic:
| GET /?foobar=sssss&go1=205+Reset+Content+senden HTTP/1.1
| Host: localhost:1406
| User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20030120
| Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,
| text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,
| text/css,*/*;q=0.1
| Accept-Language: en-us, en;q=0.50
| Accept-Encoding: gzip, deflate, compress;q=0.9
| Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
| Keep-Alive: 300
| Connection: keep-alive
| Referer: http://localhost/~henryk/resettest.php
|
| HTTP/1.0 205 Reset Content
| Connection: Close
|
Da sind nun wirklich keine Entity-Header dabei. Dennoch ändert sich das Verhalten von Mozilla nicht: Es wird eine weiße Seite angezeigt.
Hi,
Mir war diese Definition von Entity nicht bewusst.
mir auch nicht - ich hab's halt nachgelesen ;-)
Da sind nun wirklich keine Entity-Header dabei. Dennoch ändert sich das Verhalten von Mozilla nicht: Es wird eine weiße Seite angezeigt.
Hm. URL?
Cheatah
Moin,
Da sind nun wirklich keine Entity-Header dabei. Dennoch ändert sich das Verhalten von Mozilla nicht: Es wird eine weiße Seite angezeigt.
Hm. URL?
Für das PHP-Skript habe ich keinen, das ist zu dreckig. Aber eine hoffentlich äquivalente Perl-Variante unter http://gleam.homeip.net/~henryk/resettest.php (nur solange ich noch online bin).
Das Perlskript besteht nur aus
print "Status: 205 Reset Content\n\n";
Hi,
Da sind nun wirklich keine Entity-Header dabei. Dennoch ändert sich das Verhalten von Mozilla nicht: Es wird eine weiße Seite angezeigt.
vielleicht ist http://bugzilla.mozilla.org/show_bug.cgi?id=198309 diesbezüglich interessant (bzw. der vorherige Bug #49172). Das Problem ist augenscheinlich bekannt.
Cheatah
Moin,
vielleicht ist http://bugzilla.mozilla.org/show_bug.cgi?id=198309 diesbezüglich interessant (bzw. der vorherige Bug #49172). Das Problem ist augenscheinlich bekannt.
Na dann ist ja gut. Dann verhalten sich in Zukunft ja nur noch Opera 6 (wartet bis die HTTP-Verbindung geschlossen wird) und der Internet Explorer 5.5 (weiße Seite) falsch.
Hey, das ist ja für Webverhältnisse schon richtig gut. ;-)
Hi,
Na dann ist ja gut. Dann verhalten sich in Zukunft ja nur noch Opera 6 (wartet bis die HTTP-Verbindung geschlossen wird) und der Internet Explorer 5.5 (weiße Seite) falsch.
und alle HTTP/1.0-Clients, und n nicht-Browser-Clients, und m nicht-graphische Browser, und ... ;-)
Hey, das ist ja für Webverhältnisse schon richtig gut. ;-)
*g*
Cheatah
Moin,
und alle HTTP/1.0-Clients, und n nicht-Browser-Clients, und m nicht-graphische Browser, und ... ;-)
Also Lynx kann das. Wenn er einen 205-Status kriegt sagt er "Obacht: Request ausgeführt. Seiteninhalt zurücksetzen." Okay, letzteres vergisst er zu tun, aber das ist immerhin schon das bisher beste Verhalten.
Fassen wir zusammen: Es ist also Schnapsidee sich auf irgendwas zu verlassen was im HTTP-Standard steht ohne das wenigstens in einem halben Dutzend Browsern zu testen.
(Grade wieder festgestellt: Der aktuelle IE 6 kriegt nicht mal Digest-Auth nach hin.)
Hi,
Fassen wir zusammen: Es ist also Schnapsidee sich auf irgendwas zu verlassen was im HTTP-Standard steht ohne das wenigstens in einem halben Dutzend Browsern zu testen.
naja, zumindest bei nicht alltäglichen Dingen... 205 ist ein eher seltener Fall.
(Grade wieder festgestellt: Der aktuelle IE 6 kriegt nicht mal Digest-Auth nach hin.)
Jiargh.
Cheatah
Hi
mal eine Frage, wird eine Seite bei Formularversand eigentlich komplett neu geladen wenn sie auf sich selbst verweist???
Natürlich. Wie sollte der Webserver denn die Bentuzereingaben denn sonst zu verarbeiten versuchen? (Die Betonung liege auf versuchen, denn verarbeiten muss das aufgerufene Script die Daten können, sonst nützt jeder Selbstverweis nichts.)
Per POST aufgerufene Seiten werden _in aller Regel_ nicht gecacht.
Auch bei Google findest du keine, was einfach daran liegt, dass das
Ergebis, das sie produzieren in aller Regel genau _einmal_ angezeigt werden sollte. Möchtest du die Seite noch einmal sehen, so frragt dein UA meist, ob du die POST-Daten nochmals versenden möchtest.
Fabian