在 Django REST 中压缩响应负载?
Compressing the response payload in Django REST?
我想知道:是否可以在 Django REST 中压缩响应负载?
目前,响应负载是纯 JSON 数据。但是,有相当多的数据要来回反弹,所以我想知道压缩数据是否有助于解决带宽问题。
HTTP 响应压缩很可能不会由 Django 处理,而是由使用 gzip 或 deflate 算法的 HTTP 服务器处理。
您只需要确保您的 HTTP 服务器配置为压缩 HTTP 响应 Content-Type
header 设置为 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 压缩,我不需要在我的 client-side 上做任何事情 - 即使在收到 json Angular 水疗应用程序中的数据。
我的 1.3 MB JSON 有效载荷变成了大约 180 KB 的有效载荷。
一种非常快捷的方式来保存 MB 的数据。
如果您使用的是 Django / DRF 内置网络服务器而不是 Apache 或 nginx,那使用它自己的 WSGI 服务器,那么这些方法对您不起作用。
但是,Django 确实有一个内置的 gzip 中间件,您应该可以使用它,如这些答案中所述:
也就是说,对于生产用途,您应该使用真正的 Web 服务器,而不是 Django 的内置服务器。
我想知道:是否可以在 Django REST 中压缩响应负载?
目前,响应负载是纯 JSON 数据。但是,有相当多的数据要来回反弹,所以我想知道压缩数据是否有助于解决带宽问题。
HTTP 响应压缩很可能不会由 Django 处理,而是由使用 gzip 或 deflate 算法的 HTTP 服务器处理。
您只需要确保您的 HTTP 服务器配置为压缩 HTTP 响应 Content-Type
header 设置为 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 压缩,我不需要在我的 client-side 上做任何事情 - 即使在收到 json Angular 水疗应用程序中的数据。
我的 1.3 MB JSON 有效载荷变成了大约 180 KB 的有效载荷。
一种非常快捷的方式来保存 MB 的数据。
如果您使用的是 Django / DRF 内置网络服务器而不是 Apache 或 nginx,那使用它自己的 WSGI 服务器,那么这些方法对您不起作用。
但是,Django 确实有一个内置的 gzip 中间件,您应该可以使用它,如这些答案中所述:
也就是说,对于生产用途,您应该使用真正的 Web 服务器,而不是 Django 的内置服务器。