2009-12-02 8 views
5

Ich verwende Amazon S3, um statische Dateien zu liefern. Wenn der Inhaltstyp nur 'text/css' ist und ich die Datei nicht komprimiert habe, wird sie als ok zurückgegeben. Wenn ich zlib.compress() versuche, den Inhalt, der zurückgegeben wird, zu ändern und Content-Encoding in 'gzip' zu ändern, kann der Browser das Ergebnis nicht dekodieren. In Chrome ist der FehlerPython zlib nicht decodierbar, wenn es von einer HTTP-Antwort zurückgegeben wird

Error 330 net::ERR_CONTENT_DECODING_FAILED 

in Safari,

“cannot decode raw data” (NSURLErrorDomain:-1015) 

Gibt es etwas Besonderes mit Pythons zlib zu tun, um sicherzustellen, kann das Ergebnis zurückgegeben und durch den Browser dekomprimiert werden?

+0

So geht's mit der zlib-Bibliothek: http://stackoverflow.com/questions/2695152/in-python-how-do-i-decode-gzip-encoding – Ric

Antwort

0

Es ist decodierbar. Das Problem ist, dass der Sender den Empfänger belügt - keine gute Möglichkeit, eine harmonische Kommunikation zu gewährleisten. Versuchen Sie, es "zlib" anstelle von "gzip" zu nennen.

5

Ich habe das gleiche Problem.

Wenn Sie den Header senden:

Content-Encoding: gzip 

Safari/Chrome zeigen, dass Fehler.

Aber wenn Sie stattdessen senden:

Content-Encoding: deflate 

Safari/Chrome decodiert den Eingang in Ordnung.

+0

Danke! Das trieb mich an. – charleslparker

0

Statt das Modul mit zlib, (originalString = inputFile.read() und dann compressedString = zlib.compress(originalString)) Ich bin jetzt das Modul gzip:

stream = cStringIO.StringIO() 
compressor = gzip.GzipFile(fileobj=stream, mode='w') 
while True: # until EOF 
    chunk = inputFile.read(8192) 
    if not chunk: # EOF? 
     compressor.close() 
     return stream.getvalue() 
    compressor.write(chunk) 

Das Ergebnis ist dann kompatibel zu gzip; Ich weiß nicht, ob es auch dein Webserver-Problem behebt.