在Django REST中压缩响应有效负载?

时间:2015-04-23 12:25:11

标签: django django-rest-framework

我想知道:是否可以在Django REST中压缩响应有效负载?

目前,响应有效负载是普通的JSON数据。但是,有相当多的数据来回反弹,所以我想知道压缩数据是否有助于解决带宽问题。

3 个答案:

答案 0 :(得分:9)

HTTP响应压缩很可能不会由Django处理,而是由您的HTTP服务器使用gzip或deflate算法处理。

您只需确保将HTTP服务器配置为压缩HTTP响应,并将Content-Type标头设置为application/json

如何为nginx启用gzip压缩:https://rtcamp.com/tutorials/nginx/enable-gzip/

答案 1 :(得分:1)

以下对我有用。

我实际上在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数据的快捷方式。

答案 2 :(得分:0)

如果您使用的是Django / DRF内置Web服务器而不是Apache或nginx,它使用自己的WSGI服务器,那么这些方法对您无效。

然而,Django确实有一个你应该可以使用的内置gzip中间件,如这些答案所述:

https://stackoverflow.com/a/1864377/2540707
https://stackoverflow.com/a/14821684/2540707

话虽如此,对于生产用途,您应该使用真正的Web服务器而不是Django的内置服务器。