dkoch hat geschrieben:Schuss ins Blaue ohne es genau zu wissen:
Lass mal
weg.
Sieht so aus als würde hier versucht werden etwas zu decomprimieren, was nicht comprimiert ist
Guter Schuss - und fast das Blaue getroffen! Sorry, daß ich mich erst jetzt melde, aber dafür mit einer Lösung.
Die Schnittstelle
antwortet dem Browser tatsächlich komprimiert. Allerdings gibt es einen kleinen bug on Worker.py: die Kompression wird als gzip angekündigt, tatsächlich wird zlib.compress verwendet:
Code: Alles auswählen
result.stream = stream.IByteStream(zlib.compress(toJson(response).encode('utf-8'), level))
(use the source, luke
zlib.compress kann indes nur deflate, und nicht gzip.
Weiter vorn werden die Browser capabilities abgefragt, und zwar erst deflate, und dann gzip. Kann der Browser beides, wird gzip gemeldet, und das finden die Browser (alle) nicht witzig.
Nebenbei bemerkt scheint es sowohl dem OPSI Client Agent als auch dem Winst sch...egal zu sein, ob deflate, gzip oder nix angemeldet wird - sie rechnen mir deflate und basta. Wird nämlich die Kompression ganz abgeschaltet, kommen die Browser klar, aber der Winst bricht ab. Nich gut
Mein Patch also:
Code: Alles auswählen
--- a/Service/Worker.py
+++ b/Service/Worker.py
@@ -561,10 +561,11 @@ class WorkerOpsiJsonRpc(WorkerOpsi):
encoding = None
try:
- if ('deflate' in self.request.headers.getHeader('Accept-Encoding')):
- encoding = 'deflate'
+ # UH 2015-04 the encoding done by zlib below does deflate OLNY - so please answer "deflate"
if ('gzip' in self.request.headers.getHeader('Accept-Encoding')):
encoding = 'gzip'
+ if ('deflate' in self.request.headers.getHeader('Accept-Encoding')):
+ encoding = 'deflate'
except Exception, e:
pass
if not encoding:
Die Erkennung der Accept-Encoding Header wird umgekehrt. Jetzt wird (korrekt) deflate gemeldet, wenn deflate akzeptiert wird. Der Browser kommt klar, Winst auch.
(Ungelöst: wenn der Browser nur gzip akzeptiert, wird weiter gzip gemeldet, aber deflate gesendet. Vielleicht sollte man gzip ganz streichen - was Winst dan macht, habe ich nicht getestet.)
happy patching!