Harry: Komprimierte Post-Requests

Holladiewaldfee,

ich sitze im Moment vor einer Anwendung, bei der relativ große Text-Dateien (bis zu 5Mb) über ganz normale HTML-Formulare verschickt werden müssen. Diese Dateien würde ich beim Übertragen gerne komprimieren.

Die Dateien werden mit einem POST verschickt. Die Frage: gibt es überhaupt eine Möglichkeit, die Daten bei einem POST-Request als Reaktion auf einen entsprechenden vom Server verschickten Header komprimiert zu verschicken? Beim schnellen Überfliegen von ein paar RFCs bin ich nicht wirklich dahinter gekommen.

Da steht an erster Stelle natürlich die Frage: Hat der Browser überhaupt die Möglichkeit, herauszufinden, ob er POST-Daten komprimiert senden darf oder nicht, d.h. hat der Server die Möglichkeit, dem Browser mitzuteilen, daß er kein Problem mit komprimierten POST-Daten hat? Ich weiß jetzt leider nicht im Detail, wie ein POST abläuft und somit auch nicht, ob der Server die entsprechenden Header senden könnte bevor der Browser ihn mit Daten zumüllt. Daß es bei Statuscodes funktioniert (z.B. 401 oder so), weiß ich. Geht das aber auch mit anderen Headern, die eben keine Statuscodes sind? Werden die gesendet, bevor der Browser die POST-Daten verschickt oder erst nachdem der Server die Daten angenommen hat und bevor er seine Antwortseite verschickt?

Falls sowas funktioniert: Welchen Header muß der Server senden um dem Browser klarzumachen, daß er komprimierte Inhalte schicken darf? Und falls es jemand auswendig weiß: Welchen Header schickt der Browser dann zurück, um dem Server zu erzählen, daß das mit den komprimierten POST-Daten schon in Ordnung geht (ich tippe mal auf ein Content-Encoding=gzip im POST-Request)?

Ich weiß, daß Andreas Korthaus mal sowas ähnliches gebastelt hat, aber er musste soweit ich mich erinnern kann (und das im Archiv gefunden habe) nicht dynamisch auf die Daten reagieren sondern konnte voraussetzen, daß von der Gegenstelle hundertprozentig komprimierte Daten kamen.

Vielen Dank schonmal.

Ciao,

Harry

--
  Hä? Was? Signatur?! Kann man das essen?
  Wirrwarr: sh:| fo:) ch:] rl:° br:& n4:° ie:% mo:) va:) de:[ zu:) fl:( ss:) ls:[ js:|
  1. Hi,

    ich sitze im Moment vor einer Anwendung, bei der relativ große Text-Dateien (bis zu 5Mb) über ganz normale HTML-Formulare verschickt werden müssen. Diese Dateien würde ich beim Übertragen gerne komprimieren.
    Die Dateien werden mit einem POST verschickt. Die Frage: gibt es überhaupt eine Möglichkeit, die Daten bei einem POST-Request als Reaktion auf einen entsprechenden vom Server verschickten Header komprimiert zu verschicken? Beim schnellen Überfliegen von ein paar RFCs bin ich nicht wirklich dahinter gekommen.

    Nein, das kann m.E. nicht klappen. Schon allein deswegen, weil der Client nicht auf einen Request des Servers reagiert, sondern der Client den Request an den Server abschickt und daraufhin eine response vom Server bekommt. Der Server verschickt keine Requests, der Client (Browser) beantwortet keine Requests. http ist asymetrisch...

    Wie wäre es, die Dateien manuell zu zippen, diese gezippte Datei zu verschicken und dann serverseitig wieder (automatisch) zu entzippen?

    Ich weiß jetzt leider nicht im Detail, wie ein POST abläuft und somit auch nicht, ob der Server die entsprechenden Header senden könnte bevor der Browser ihn mit Daten zumüllt.

    Nein, der Server reagiert nur. Der Client agiert.

    Daß es bei Statuscodes funktioniert (z.B. 401 oder so), weiß ich.

    Die sind aber auch nur Reaktionen auf Requests vom Client.

    Geht das aber auch mit anderen Headern, die eben keine Statuscodes sind? Werden die gesendet, bevor der Browser die POST-Daten verschickt oder erst nachdem der Server die Daten angenommen hat und bevor er seine Antwortseite verschickt?

    Erst danach. Woher sollte der Server auch wissen, ob der Browser Daten verschicken will?

    Falls sowas funktioniert: Welchen Header muß der Server senden um dem Browser klarzumachen, daß er komprimierte Inhalte schicken darf?

    s.o.

    Und falls es jemand auswendig weiß: Welchen Header schickt der Browser dann zurück,

    Er schickt den Header eben nicht zurück (mit einer Response). Er schickt ihn mit der Anfrage.

    um dem Server zu erzählen, daß das mit den komprimierten POST-Daten schon in Ordnung geht (ich tippe mal auf ein Content-Encoding=gzip im POST-Request)?

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
  2. Hi!

    ich sitze im Moment vor einer Anwendung, bei der relativ große Text-Dateien (bis zu 5Mb) über ganz normale HTML-Formulare verschickt werden müssen. Diese Dateien würde ich beim Übertragen gerne komprimieren.

    Wäre mir nicht bekannt(was natürlich nichts heißt ;-)), aber wieso komprimierst Du die Datei nicht vorher? Entweder mit einem Tool, oder - da ich davon ausgehe das man eine 5MB große Textdatei nicht manuell erstellt, wieso komprimierst Du die Datei nicht direkt bei der Erstellung?
    Ich denke das es hierfür eigentlich kaum Notwendigkeiten gibt, normale Requestst sind halt nie besonders groß, und Dateiuploads sind oft Binäre Dateien(Bilder...) die sich nicht/kaum komprimieren lassen.

    Eine weitere Möglichkeit wäre noch ein SSH-Tunnel, dann kann die Verbindung auf der SSH-Ebene komplett komprimiert werden, aber dazu brauchst Du

    a) einen SSH-Client auf dem lokalen Rechner(z.B. putty),
    b) SSH auf dem Server, und
    c) einen Server der sich ohne den Host-header ansprechen läßt, also ohne domainbasierte Virtual Hosts.

    Vielleicht geht es auch mit einer hosts-Datei auf dem Client, dann müßte man einen speziellen Domainnamen hierfür reservieren und requests an diese Domain durch den SSH-Tunnel schicken, habe ich aber noch nicht versucht, ist nur mal so eine Idee.

    Grüße
    Andreas

    1. Holladiewaldfee,

      das Hauptproblem ist, daß nicht nur ich diese Dateien verschicken muß, sondern auch noch 'n Haufen anderer Leute. Da es sich bei diesem Ding um ein größeres Projekt handelt kann ich nicht allen Leuten sagen, sie sollen ihre Dateien gefälligst komprimieren (das liegt auch gar nicht in meiner Hand). Darüberhinaus kennen weder ich noch der Mensch, für den ich mir das alles überlege, alle Leute, die da dann Dateien verschicken müssen/sollen.

      Und gerade deswegen war ich halt an einer Lösung interessiert, die keine zusätzlichen Aktionen auf Seiten des Clienten erfordert.

      Aber anscheinend scheint es ja nicht mit Bordmitteln zu funktionieren. Schade eigentlich. Trotzdem Danke ;-)

      Ciao,

      Harry

      --
        Hä? Was? Signatur?! Kann man das essen?
        Wirrwarr: sh:| fo:) ch:] rl:° br:& n4:° ie:% mo:) va:) de:[ zu:) fl:( ss:) ls:[ js:|