Klaus: Komprimierte Inhalte ausliefern

Hallo Forum!

Ich möchte auf meinem selbst geschriebenen Http Server etwas Bandbreite sparen und dazu bestimmte Dateien komprimiert ausliefern.
Mein Server spricht übrigens http 1.0.

Ich bitte um Kommentare, ob das so richtig ist, und ob es sonst noch was zu beachten gibt:

  • Prüfen ob die Gegenseite komprimierte inhalte versteht:
    im Header suchen, ob bei 'Accept-Encoding'  gzip zu finden ist.

  • Im Response Header 'Content-Encoding: gzip' mit angeben.

  • dann einfach die komprimierte Datei senden.

außerdem stellt sich mir die Frage, kann ich in einem JavaScript irgendwie abfragen, ob der Browser komprimierte Inhalte versteht, um darauf irgendwie reagieren zu können?

Grüße,
Klaus

  1. Hallo,

    Sollte so richtig sein.

    außerdem stellt sich mir die Frage, kann ich in einem JavaScript irgendwie abfragen, ob der Browser komprimierte Inhalte versteht, um darauf irgendwie reagieren zu können?

    Soweit ich weiß, nein. Zu welchem Zweck?

    Gruß

  2. außerdem stellt sich mir die Frage, kann ich in einem JavaScript irgendwie abfragen, ob der Browser komprimierte Inhalte versteht, um darauf irgendwie reagieren zu können?

    Wenn es nur um Ressourcen von deinem Server geht, könntest du unterschiedliche  Dokumente liefern, je nachdem, ob Komprimierung erlaubt ist oder nicht. In der nichtkomprimierten Version stünde dann "var gzip=false;", in der komprimierten Version "var gzip=true;". Das ist nur eine von unendlich vielen Möglichkeiten (du könntest auch unterschiedliche Javascript-Ressourcen einbinden, oder eine Meta-Angabe machen oder irgendwas anderes). Alternativ könntest du auch einen AJAX-Request loslassen, die Antwort lässt du vom Server abhängig davon generieren, ob Komprimierung erlaubt ist.
    Eine Möglichkeit, direkt im Browser abzufragen, ob er das kann, ist mir nicht bekannt.

    --
    Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
    Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
  3. Moin Moin!

    Ich möchte auf meinem selbst geschriebenen Http Server etwas Bandbreite sparen und dazu bestimmte Dateien komprimiert ausliefern.

    Dir ist klar, dass Du bei dynamischen Inhalten Bandbreite gegen CPU-Zeit tauschst? Bei statischen Inhalten hast Du die wahl, entweder Inhalte unkomprimiert vorzuhalten und bei Bedarf zu komprimieren, oder Inhalte komprimiert vorzuhalten und bei Bedarf zu dekomprimieren, oder Inhalte komprimiert und unkomprimiert vorzuhalten. Hier tauschst Du wieder Bandbreite gegen CPU-Zeit oder Speicherplatz.

    Mein Server spricht übrigens http 1.0.

    Warum nicht 1.1?

    Ich bitte um Kommentare, ob das so richtig ist, und ob es sonst noch was zu beachten gibt:

    • Prüfen ob die Gegenseite komprimierte inhalte versteht:
      im Header suchen, ob bei 'Accept-Encoding'  gzip zu finden ist.

    • Im Response Header 'Content-Encoding: gzip' mit angeben.

    • dann einfach die komprimierte Datei senden.

    So in der Art.

    Dich könnte übrigens auch gzip_cnc interessieren, auch wenn es darum geht, Sicherheitslücken zu vermeiden.

    außerdem stellt sich mir die Frage, kann ich in einem JavaScript irgendwie abfragen, ob der Browser komprimierte Inhalte versteht, um darauf irgendwie reagieren zu können?

    Wenn Du Javascript im Browser meinst: Nein, und wozu auch? Das handeln Browser und Server untereinander aus, Javascript hat damit nichts zu tun. Du kannst ja nicht einmal erwarten, dass der Browser etwas mit Javascript anfangen kann, darf oder will. (Seltenes) serverseitiges Javascript könnte sich natürlich die Request-Header ansehen und für entsprechende Response-Header und ggf. für eine entsprechende (De)komprimierung sorgen.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  4. Ich werd das dann so machen, das ich die statischen Dateien einmal in komprimierter Form und einmal in unkomprimierter Form rumliegen habe. Damit spare ich Bandbreite ohne zusätzliche CPU Kapazität zu verbrauchen.
    Da mein Webserver mit 12 Mhz läuft (mit 2 kb RAM), is die CPU-Kapazität, sagen wir mal begrenzt ;)
    Speicher habe ich dank großer und billiger SD-Karten genug.

    Das mit der Abfrage in Javascript, wollte ich nur wissen, um die Möglichkeiten zu kennen und drüber nachzudenken, ob sich das evtl. sinnvoll verwenden lässt.  Das brauch ich also nicht.

    Danke und Gruß,
    Klaus

    1. Moin Moin!

      Ich werd das dann so machen, das ich die statischen Dateien einmal in komprimierter Form und einmal in unkomprimierter Form rumliegen habe.

      Achte darauf, dass die Inhalte wirklich identisch sind. Make kann da sehr hilfreich sein, mit einer Regel, wie man aus unkomprimierten Dateien komprimierte macht, und einer liste aller unkomprimierten Dateien (z.B. per $(shell find ...))

      Damit spare ich Bandbreite ohne zusätzliche CPU Kapazität zu verbrauchen.
      Da mein Webserver mit 12 Mhz läuft (mit 2 kb RAM), is die CPU-Kapazität, sagen wir mal begrenzt ;)
      Speicher habe ich dank großer und billiger SD-Karten genug.

      Das "stinkt" nach Embedded System statt Webserver im Internet. Hast Du einigermaßen Kontrolle darüber, mit welchen Browsern auf das System zugegriffen wird? Die meisten aktuellen Browser sollten problemlos mit komprimierten Inhalten klarkommen, so dass Du Dir die unkomprimierten Inhalte evtl. ganz schenken kannst.

      Das mit der Abfrage in Javascript, wollte ich nur wissen, um die Möglichkeiten zu kennen und drüber nachzudenken, ob sich das evtl. sinnvoll verwenden lässt.  Das brauch ich also nicht.

      Richtig.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".