Andreas: Post Header senden ohne fsockopen

Hallo!
Kann man keinen http-Post header senden ohne umständlich eine Socketverbindung aufzubauen? http://www.koehntopp.de/php/snippets.html#code-post

Ich will nur ein paar mehr Variablen übergeben, die wohl für den GET Header zu lang sind, also ich suche einen Ersatz für:

<?
Header("Location: seite.php?var1=wert1&var2=Wert2...")
?>

Wie gesagt, gibt es was vergleichbares für POST?

Sonst müßte ich das alles in der DB zwischenspeichern, denn das direkte Senden des Formulars geht aus anderen Gründen nicht.

Grüße
Andreas

  1. Hallo nochmal!

    Hab mal ein bisschen nachgeforcht wie lange der HTTP-HEADER GET sein darf: Hab Ergebnisse von 255-4.000 Zeichen gefunden - soll wohl irgendie auch browserspezifisch sein. Welche Browser können denn nur kurze HEADER? Welche Länge könnte man unbedenklich nutzen?
    Grüße
    Andreas

    1. Hab mal ein bisschen nachgeforcht wie lange der HTTP-HEADER GET sein darf: Hab Ergebnisse von 255-4.000 Zeichen gefunden - soll wohl irgendie auch browserspezifisch sein. Welche Browser können denn nur kurze HEADER? Welche Länge könnte man unbedenklich nutzen?

      Hallo Andreas,

      http://www.heise.de/ix/artikel/1998/04/168/
      "Im Gegensatz zu einer weitverbreiteten Annahme sind weder GET- noch POST-Argumente in der Länge begrenzt, allerdings empfiehlt der HTTP-Standard eine obere Grenze von 255 Zeichen aufgrund von Inkompatibilitäten älterer Browser. Der häufig eingesetzte WWW-Cache Squid hingegen begrenzt in src/url.h die maximale Länge von URLs - und damit auch die GET-Methode - auf 4 KByte. Die Längenbegrenzung für POST ist in squid.conf über einen Konfigurationsschalter variabel einstellbar. Im Zusammenspiel mit Squid ist auch zu beachten, daß bei Verwendung von GET alle Eingaben des Benutzers in den Logfiles aller traversierten Caches aufgeführt sind. "

      Viele Grüße

      Mathias Bigge

      1. Hi!,

        http://www.heise.de/ix/artikel/1998/04/168/

        besagten Artikel habe ich auch gelesen - aber was sagt mir das jetzt? Soll ich ruhig 4KB, oder nur 255B? Welche Browser könnten das denn nicht? Woher weiß ich ob mein Server(?) squid.conf  benutzt? Und da können alte Browser nicht mit umgehen?
        Grüße
        Andreas

        1. Lieber Andreas,

          ich weiß auch nichts Sicheres, aber ich habe mal gehört, dass man 1024 Zeichen heute mit einiger Sicherheit übergeben kann !? Ich habe mal relativ lange Fragebögen auf die Schnelle ins Netz gestellt(Einstufungstests), bin aber nie an eine Grenze gestoßen. Ich denke, dass ich dabei die 255 Zeichen deutlich überschritten habe.

          Viele Grüße

          Mathias Bigge

          1. Hi!
            Das Problem - Du weißr nicht ob Du an Grenzen gestoßen bist - Du magsst nichts davon gehört haben, aber wer sagt das irgendwelche User keine Probleme hatten und einfach weggegangen sind?
            Grüße
            Andreas

    2. Moin!

      Hab mal ein bisschen nachgeforcht wie lange der HTTP-HEADER GET sein darf: Hab Ergebnisse von 255-4.000 Zeichen gefunden - soll wohl irgendie auch browserspezifisch sein. Welche Browser können denn nur kurze HEADER? Welche Länge könnte man unbedenklich nutzen?

      Tja, das ist in der Tat ein Geheimnis.

      Kurzrecherche bei Google brachte das hier:

      "As well, the amount of form data that can be handled by the get method is limited by the maximum length of the URL that the server and browser can process. To be safe, any form whose input might contain non-ASCII characters or more than 100 characters should use METHOD=post."
      http://www.htmlhelp.com/reference/html40/forms/form.html

      Das Problem ist: Im Standard steht keine Begrenzung drin, die wird durch Browser und Server (!) verursacht.

      Diese Diskussion dürfte interessant sein: http://www.jguru.com/forums/view.jsp?EID=310779

      Bis zu 255 Byte URL-Länge sind wohl allgemein als sicher angesehen. Netscape-Browser haben wohl garkeine Beschränkung, IE 4 kriegt 2K hin, Apache soll bis zu 8K verarbeiten können, und ganz generell: Wenn der Request zu lang ist, sollte ein Server mit Error-Code 414 (Request-URI too long) antworten. Allerdings ist das ein HTTP/1.1-Statuscode, den alle alten Programme nicht explizit verstehen (die sehen dann nur 4xx (Clientfehler) und reagieren irgendwie).

      Ansonsten kriegt man in dieser Diskussion tolle Antworten:
      255 Zeichen, oder auch nur 240 Zeichen, 2000, 1024, oder 290 (wo derjenige das wohl herhat...).

      - Sven Rautenberg

      1. Hi Sven,

        Apache soll bis zu 8K verarbeiten können

        /* Limits on the size of various request items.  These limits primarily
         * exist to prevent simple denial-of-service attacks on a server based
         * on misuse of the protocol.  The recommended values will depend on the
         * nature of the server resources -- CGI scripts and database backends
         * might require large values, but most servers could get by with much
         * smaller limits than we use below.  The request message body size can
         * be limited by the per-dir config directive LimitRequestBody.
         *
         * Internal buffer sizes are two bytes more than the DEFAULT_LIMIT_REQUEST_LINE
         * and DEFAULT_LIMIT_REQUEST_FIELDSIZE below, which explains the 8190.
         * These two limits can be lowered (but not raised) by the server config
         * directives LimitRequestLine and LimitRequestFieldsize, respectively.
         *
         * DEFAULT_LIMIT_REQUEST_FIELDS can be modified or disabled (set = 0) by
         * the server config directive LimitRequestFields.
         */

        #ifndef DEFAULT_LIMIT_REQUEST_LINE
        #define DEFAULT_LIMIT_REQUEST_LINE 8190
        #endif /* default limit on bytes in Request-Line (Method+URI+HTTP-version) */

        #ifndef DEFAULT_LIMIT_REQUEST_FIELDSIZE
        #define DEFAULT_LIMIT_REQUEST_FIELDSIZE 8190
        #endif /* default limit on bytes in any one header field  */

        #ifndef DEFAULT_LIMIT_REQUEST_FIELDS
        #define DEFAULT_LIMIT_REQUEST_FIELDS 100
        #endif /* default limit on number of request header fields */

        (Apache-Quelltext "src/include/httpd.h")

        Viele Grüße
              Michael

        1. Hi!

          Ist ja Prima das der Apache so viel schafft, nur bringt mir das nix, dachte mir sowieso das das Problem mal wieder bei älteren Browsern liegt, aber wenn alle 4.0er über 1000 B liegen sollte ich mir eigentlich keine großen Sorgen machen, solange ich keine Textareas übertrage!
          Grüße
          Andreas

          PS: Genau in Google habe ich ne Zeit danach gesucht, und wie gesagt zig Antworten erhalten!

  2. Hi!
    Umgehen könnte ich das ganze ja ganz einfach mit POST, aolso nochmal die Frage meines ursprungs-Postings:

    Hallo!
    Kann man keinen http-Post header senden ohne umständlich eine Socketverbindung aufzubauen? http://www.koehntopp.de/php/snippets.html#code-post

    Ich will nur ein paar mehr Variablen übergeben, die wohl für den GET Header zu lang sind, also ich suche einen Ersatz für:

    <?
    Header("Location: seite.php?var1=wert1&var2=Wert2...")
    ?>

    Wie gesagt, gibt es was vergleichbares für POST?

    Sonst müßte ich das alles in der DB zwischenspeichern, denn das direkte Senden des Formulars geht aus anderen Gründen nicht.

    Grüße
     Andreas

    1. Hoi,

      Kann man keinen http-Post header senden ohne umständlich eine
      Socketverbindung aufzubauen? http://www.koehntopp.de/php/snippets.html#code-post

      Nein ;-) Wenn du etwas per POST uebermitteln willst, wirst du wohl
      die Sockets bemuehen muessen.

      Gruesse aus dem nassen Muenster,
       c.j.k

      1. Hi!
        OK, das wollte ich nur wissen, so umständlich ist es ja auch nicht, aber ich werde wohl trotzdem bei GET bleiben, hat denn jemand ne Idee, welchen Browsern ich mal auf den Zahn fühlen sollte, un mal ein wenig testen? Oder schaffen die 4er alle 1024? Das muß doch irgendwie zu klären sein!
        Grüße
        Andreas