【发布时间】:2015-07-01 15:17:40
【问题描述】:
我想知道:是否可以在 Django REST 中压缩响应负载?
目前,响应负载是纯 JSON 数据。但是,有很多数据要来回反弹,所以我想知道压缩数据是否有助于解决带宽问题。
【问题讨论】:
标签: django django-rest-framework
我想知道:是否可以在 Django REST 中压缩响应负载?
目前,响应负载是纯 JSON 数据。但是,有很多数据要来回反弹,所以我想知道压缩数据是否有助于解决带宽问题。
【问题讨论】:
标签: django django-rest-framework
HTTP 响应压缩很可能不是由 Django 处理,而是由您的 HTTP 服务器使用 gzip 或 deflate 算法处理。
您只需要确保您的 HTTP 服务器配置为压缩 HTTP 响应并将 Content-Type 标头设置为 application/json。
如何为 nginx 启用 gzip 压缩:https://rtcamp.com/tutorials/nginx/enable-gzip/
【讨论】:
以下内容对我有用。
我实际上是在 nginx 级别打开 gzip,而不是在 Django 或 Django Rest Framework 中。
/etc/nginx/nginx.conf 文件:
http {
#... other settings ...#
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
}
这将压缩留给 nginx 服务器,并且由于大多数现代浏览器自动知道如何提取(解压缩)gzip 压缩,因此我不需要在客户端执行任何操作 - 即使在 Angular 中接收 json 数据时也是如此水疗应用程序。
我的 1.3 MB JSON 负载变成了大约 180 KB 的负载。
一种非常快速且快速的方式来保存 MB 的数据。
【讨论】:
如果您使用的是 Django / DRF 内置 Web 服务器而不是 Apache 或 nginx,它使用自己的 WSGI 服务器,那么这些方法对您不起作用。
但是,Django 确实有一个内置的 gzip 中间件,您应该可以使用它,如这些答案中所述:
https://stackoverflow.com/a/1864377/2540707
https://stackoverflow.com/a/14821684/2540707
话虽如此,对于生产用途,您应该使用真正的 Web 服务器,而不是 Django 的内置服务器。
【讨论】: