Frage

Wenn Webserver kann gzip Antwort senden, warum kann nicht Browser gesendet Anfrage gzip?

War es hilfreich?

Lösung

Der Client und Server müssen darin übereinstimmen, wie zu kommunizieren; Teil davon ist, ob die Kommunikation zusammengedrückt werden kann. HTTP wurde als Request / Response-Modell entwickelt, und die ursprüngliche Schöpfung wurde mit ziemlicher Sicherheit in Betracht gezogen, immer kleine Wünsche haben und potenziell große Antworten. Die Kompression ist nicht erforderlich HTTP zu implementieren, gibt es beide Server und Clients, die es nicht unterstützen.

HTTP-Komprimierung wird vom Client implementiert sagen, es Kompression unterstützen kann, und wenn der Server sieht dies in der Anforderung und unterstützt Komprimierung es die Antwort komprimieren kann. So komprimieren die Anfrage würde der Kunde eine „Pre-Anfrage“ haben, die ausgehandelten tatsächlich, dass die Anforderung komprimiert gemacht werden würde, oder es müssten erfordern Kompression als unterstützte Codierung für alle Anforderungen.

* UPDATE Februar '17 * Es ist 8 Jahre gewesen, aber wie @ Phil_1984_ Noten, eine dritte mögliche Lösung wäre für den Client und Server sein, um Komprimierung zu verhandeln und dass dann für nachfolgende Anforderungen zu verwenden. In der Tat, Dinge wie HSTS arbeiten nur auf diese Weise mit dem Client-Caching, dass der Server nur TLS erwartet zu sprechen und alle unverschlüsselten Verbindungen zu ignorieren. HTTP wurde ausdrücklich staatenlos sein entworfen, aber wir haben darüber hinaus, dass an dieser Stelle bewegt.

Andere Tipps

Ein Client kann nicht im Voraus weiß, dass ein Server eine gzip-Anfrage verstehen würde, aber der Server kann wissen, dass der Kunde eine akzeptieren.

Es könnte, vorausgesetzt, es könnte garantieren, dass der Server es akzeptieren würde. Dies könnte eine OPTIONS-Anforderung bedeutet, verwendet wird.

Es gibt eine Menge Dinge, die Web-Browser (zB Pipelining) tun könnte, dass sie nicht tun. Web-Browser-Entwickler sollten Sie die Kompatibilität Auswirkungen einer Änderung.

In einer heterogenen Umgebung, gibt es eine Menge von verschiedenen Web-Servern und Konfigurationen. Macht eine Änderung an die Art und Weise ein Client Arbeiten einige von ihnen brechen könnte.

Vielleicht nur 1% der Server könnte gzipped Anfragen akzeptieren, aber vielleicht einige von denen werben, dass sie es tun, aber es kann nicht richtig annehmen -., So dass Benutzer von Hochladen von Dateien auf den verlinkten Seiten verweigert werden würde

Historisch gesehen gibt es eine Menge zerbrochenen Client / Server-Implementierungen gewesen - für eine lange Zeit, gzipped Antworten in gängigen Web-Browsern gebrochen waren (zum Glück verschwunden diejenigen sind jetzt meistens)

.

So können Sie mit schwarzen Listen von User-Agents oder Server (oder Domainnamen) würden am Ende, wo diese Optionen automatisch ausgeschaltet wurden gedreht, was böse ist.

Weil sie nicht wissen, dass der Server es akzeptieren kann. Eine HTTP-Transaktion hat eine einzige Anforderung durch das durch eine Reaktion gefolgt Client gesendet. Eines der Dinge, die der Client sendet ist, welche Codierung / Kompression es unterstützen kann. Der Server kann dann entscheiden, wie die Antwort zu komprimieren. Der Kunde hat diesen Luxus nicht.

Wenn Sie eine Web-Anwendung schreiben, ich gehe davon aus, dass Sie die Kontrolle sind, was an den Client gesendet wird und was zurück vom Client gesendet werden.

Es wäre leicht genug, um eine gzip Implementierung in Javascript zu schreiben, dass die Post-Daten komprimiert an den Server gesendet werden. Der Server kann einen Filter (J2EE term) haben, die Client-Daten kennt komprimiert gesendet wird, dekomprimiert dieses Filter die Daten und übergibt dann die Daten an das Servlet (oder Aktionsklassen in Spreizen), der die Daten normal gelesen z.B. request.getParameter (...).

Das scheint durchaus logisch und tun können, wenn Sie die Kontrolle haben. Wie andere Beiträge erwähnen, können Sie nicht auf den Browser verlassen, dies automatisch zu tun, aber da Sie die Web-Seiten schreiben, können Sie den Browser zu tun, um die Kompression Sie nach (mit ein wenig Arbeit) bekommen.

Andy.

HTTP wird auf diese Weise gestaltet:

  • Der Kunde sagt, dass seine Anfrage im Klartext (einschließlich wenn komprimierte Antworten verstehen)
  • Der Server antwortet mit der Propper Codierung (komprimiert oder nicht)

Aber in diesem DESIGN kann der Client komprimierte Anfragen nicht senden, weil es nicht weiß, wenn der Server im Voraus verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top