Tweak encoding behaviour

- Don't fail to identity encoding when an unknown encoding is specified.
- Don't constrain encodings. I want to try to modify traffic as little as
possible by default.
- When decoding, delete content-encoding header rather than set it to "identity"
- Refuse to decode/encode when there is an existing but unknown
content-encoding header.
This commit is contained in:
Aldo Cortesi 2011-08-02 20:34:01 +12:00
parent bb6ec29b18
commit 8cc0469ee7
3 changed files with 13 additions and 8 deletions

View File

@ -8,21 +8,25 @@ __ALL__ = ["ENCODINGS"]
ENCODINGS = set(["identity", "gzip", "deflate"]) ENCODINGS = set(["identity", "gzip", "deflate"])
def decode(encoding, content): def decode(e, content):
encoding_map = { encoding_map = {
"identity": identity, "identity": identity,
"gzip": decode_gzip, "gzip": decode_gzip,
"deflate": decode_deflate, "deflate": decode_deflate,
} }
return encoding_map.get(encoding, identity)(content) if e not in encoding_map:
return None
return encoding_map[e](content)
def encode(encoding, content): def encode(e, content):
encoding_map = { encoding_map = {
"identity": identity, "identity": identity,
"gzip": encode_gzip, "gzip": encode_gzip,
"deflate": encode_deflate, "deflate": encode_deflate,
} }
return encoding_map.get(encoding, identity)(content) if e not in encoding_map:
return None
return encoding_map[e](content)
def identity(content): def identity(content):
""" """

View File

@ -588,8 +588,6 @@ class FlowMaster(controller.Master):
f.request.anticache() f.request.anticache()
if self.anticomp: if self.anticomp:
f.request.anticomp() f.request.anticomp()
else:
f.request.constrain_encoding()
if self.server_playback: if self.server_playback:
pb = self.do_server_playback(f) pb = self.do_server_playback(f)

View File

@ -134,11 +134,14 @@ class HTTPMsg(controller.Msg):
Content-Encoding header and changing Content-Encoding header to Content-Encoding header and changing Content-Encoding header to
'identity'. 'identity'.
""" """
ce = self.headers["content-encoding"]
if not ce or ce[0] not in encoding.ENCODINGS:
return
self.content = encoding.decode( self.content = encoding.decode(
(self.headers["content-encoding"] or ["identity"])[0], ce[0],
self.content self.content
) )
self.headers["content-encoding"] = ["identity"] del self.headers["content-encoding"]
def encode(self, e): def encode(self, e):
""" """