在 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 的内置服务器。