Björn: Formular, Selbstverweis, wird Seite komplett neu geladen??

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

  1. 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

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      • 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.

      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.

      --
      Henryk Plötz
      Grüße aus Berlin
      1. 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

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. 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

        1. 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.

          --
          Henryk Plötz
          Grüße aus Berlin
          1. 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

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. 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)

              --
              Henryk Plötz
              Grüße aus Berlin
              1. 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 ;-)

                http://ploetzli.ch/forumtst/resettest.php

                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

                --
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
                1. 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.

                  --
                  Henryk Plötz
                  Grüße aus Berlin
                  1. 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

                    --
                    X-Will-Answer-Email: No
                    X-Please-Search-Archive-First: Absolutely Yes
                    1. 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";

                      --
                      Henryk Plötz
                      Grüße aus Berlin
                  2. 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

                    --
                    X-Will-Answer-Email: No
                    X-Please-Search-Archive-First: Absolutely Yes
                    1. 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. ;-)

                      --
                      Henryk Plötz
                      Grüße aus Berlin
                      1. 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

                        --
                        X-Will-Answer-Email: No
                        X-Please-Search-Archive-First: Absolutely Yes
                        1. 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.)

                          --
                          Henryk Plötz
                          Grüße aus Berlin
                          1. 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

                            --
                            X-Will-Answer-Email: No
                            X-Please-Search-Archive-First: Absolutely Yes
  2. 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