Cramjam集成Starlette ASGI框架。
项目描述
starlette-cramjam
Cramjam集成Starlette ASGI框架。
源代码: https://github.com/developmentseed/starlette-cramjam
starlette-cramjam
中间件旨在提供一个独特的压缩中间件,以最小要求支持Brotli、GZip和Deflate压缩算法。
中间件将对包含“br”、“gzip”或“deflate”的Accept-Encoding头部的任何请求的响应进行压缩。
对于官方的Starlette
中间件,starlette-cramjam
提供的将处理标准和流响应。
stralette-cramjam
是基于pyrus-cramjam构建的,这是一个对Rust中的解压缩算法的极薄Python绑定。
安装
您可以从pypi安装starlette-cramjam
$ pip install -U pip
$ pip install starlette-cramjam
或从源安装
$ pip install -U pip
$ pip install https://github.com/developmentseed/starlette-cramjam.git
使用方法
以下参数被支持
- compression(压缩列表) - 可用压缩算法的列表。此列表还定义了优先顺序。默认为
[Compression.gzip, Compression.deflate, Compression.br]
, - minimum_size(整数) - 不压缩小于此最小字节数的响应。默认为
500
。 - exclude_path(字符串集合)- 对特定
path
请求不压缩响应。条目必须是有效的正则表达式。默认为{}
。 - exclude_mediatype(字符串集合)- 不压缩特定媒体类型的响应(例如
image/png
)。默认为{}
。
最小(默认)示例
import uvicorn
from starlette.applications import Starlette
from starlette.responses import PlainTextResponse
from starlette_cramjam.middleware import CompressionMiddleware
# create application
app = Starlette()
# register the CompressionMiddleware
app.add_middleware(CompressionMiddleware)
@app.route("/")
def index(request):
return PlainTextResponse("Hello World")
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
使用选项
import uvicorn
from starlette.applications import Starlette
from starlette.responses import PlainTextResponse, Response
from starlette_cramjam.compression import Compression
from starlette_cramjam.middleware import CompressionMiddleware
# create application
app = Starlette()
# register the CompressionMiddleware
app.add_middleware(
CompressionMiddleware,
compression=[Compression.gzip], # Only support `gzip`
minimum_size=0, # should compress everything
exclude_path={"^/foo$"}, # do not compress response for the `/foo` request
exclude_mediatype={"image/jpeg"}, # do not compress jpeg
)
@app.route("/")
def index(request):
return PlainTextResponse("Hello World")
@app.route("/image")
def foo(request):
return Response(b"This is a fake body", status_code=200, media_type="image/jpeg")
@app.route("/foo")
def foo(request):
return PlainTextResponse("Do not compress me.")
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
更改
请参阅 CHANGES.md。
贡献与发展
请参阅 CONTRIBUTING.md
许可证
请参阅 LICENSE
作者
由 Development Seed 创建
查看个人贡献者的列表 contributors。
项目详情
关闭
starlette_cramjam-0.3.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b7d5a95ef85f7e37a972ee1007bbc851c946ecdedbc95f54f9a2f40bed2d5431 |
|
MD5 | 54ec066a69cb475c79965e92aa3093ba |
|
BLAKE2b-256 | 19b131021667f3f444fbc84396ae91780c9fad237153e429e1b96fe5f561d2dc |
关闭
starlette_cramjam-0.3.3-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 91675232b9847f6d45bbc38937c3beaaec51f80ce31167a5a7941b348967e95c |
|
MD5 | b56f08f17584ebed320ef4a3129cba76 |
|
BLAKE2b-256 | 93827ed3969bccad106c5218592c4657d35d740fa2bad82b138b4cc4151d01b9 |