我想知道:是否可以在Django REST中压缩响应有效负载?
目前,响应有效负载是普通的JSON数据。但是,有相当多的数据来回反弹,所以我想知道压缩数据是否有助于解决带宽问题。
答案 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的内置服务器。