aio-libs / aio-libs/aiohttp

Implement brotli everywhere

Open
#2,518 8 comments 1 reaction 0 assignees View on GitHub
enhancement
Dominant language
Python
Stars
16.5k
Forks
2.4k
Avg merge
17h 22m
Merged PRs (30d)
212

Description

Now brotli is supported on client side for reading brotli compressed responses.
We need to support it on other sides: sending client request, reading request on server and sending server response, multipart maybe.

See the difference between `brotly` and `zlib` usage.
Ideally `brotly` should be supported everywhere we do support `gzip` by `zlib` library usage.
```
andrew•~/projects/aiohttp(master⚡)» pss zlib aiohttp (aiohttp) [11:58:30]
aiohttp/multipart.py
7:import zlib
391: return zlib.decompress(data, -zlib.MAX_WBITS)
393: return zlib.decompress(data, 16 + zlib.MAX_WBITS)
799: zlib_mode = (16 + zlib.MAX_WBITS
800: if encoding == 'gzip' else -zlib.MAX_WBITS)
801: self._compress = zlib.compressobj(wbits=zlib_mode)

aiohttp/http_parser.py
4:import zlib
622: zlib_mode = (16 + zlib.MAX_WBITS
623: if encoding == 'gzip' else -zlib.MAX_WBITS)
624: self.decompressor = zlib.decompressobj(wbits=zlib_mode)
635: self.decompressor = zlib.decompressobj()

aiohttp/http_websocket.py
11:import zlib
184: # Compress wbit 8 does not support in zlib
198: # Compress wbit 8 does not support in zlib
218: # compress wbit 8 does not support in zlib
221: 'zlib does not support wbits=8')
282: self._decompressobj = zlib.decompressobj(wbits=-zlib.MAX_WBITS)
547: self._compressobj = zlib.compressobj(wbits=-self.compress)
551: zlib.Z_FULL_FLUSH if self.notakeover else zlib.Z_SYNC_FLUSH)

aiohttp/web_response.py
7:import zlib
620: zlib_mode = (16 + zlib.MAX_WBITS
621: if coding.value == 'gzip' else -zlib.MAX_WBITS)
622: compressobj = zlib.compressobj(wbits=zlib_mode)

aiohttp/http_writer.py
5:import zlib
180: zlib_mode = (16 + zlib.MAX_WBITS
181: if encoding == 'gzip' else -zlib.MAX_WBITS)
182: self._compress = zlib.compressobj(wbits=zlib_mode)

andrew•~/projects/aiohttp(master⚡)» pss brotli aiohttp (aiohttp) [11:59:42]
aiohttp/http_parser.py
21: import brotli
618: 'Can not decode content-encoding: brotli (br). '
619: 'Please install `brotlipy`')
620: self.decompressor = brotli.Decompressor()
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.