2015-04-23 71 views
5

我想知道:是否有可能在Django REST中壓縮響應負載?壓縮Django REST中的響應負載?

此刻,響應有效載荷是純JSON數據。然而,有相當多的數據來回反彈,所以我想知道壓縮數據是否有助於解決帶寬問題。

回答

7

HTTP響應壓縮很可能不會由Django處理,而是由您的HTTP服務器使用gzip或deflate算法處理。

您只需確保您的HTTP服務器配置爲壓縮HTTP響應Content-Type標頭設置爲application/json

如何啓用gzip壓縮的nginx:https://rtcamp.com/tutorials/nginx/enable-gzip/

+0

確保考慮執行壓縮的額外CPU /延遲的性能權衡。 –

+0

@dwightgunning你知道任何會提供線索的論文嗎? – aumo

+0

http://tweaked.io/guide/nginx/概述權衡。只要你有CPU空間,你應該沒問題。只要選擇一些理智的,並繼續前進;-) –

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 spa應用程序中接收json數據。

我的1.3 MB JSON負載變成了大約180 KB的負載。

一種非常快捷的方式來保存MB的數據。

0

如果您使用的是Django/DRF內置Web服務器而不是Apache或nginx,它使用自己的WSGI服務器,所以這些方法不適用於您。

然而,Django的確實有一個內置的gzip中間件,你應該能夠使用,因爲在這些答案中描述:

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

話雖這麼說,對於生產中使用,你應該使用真正的Web服務器而不是Django的內置服務器。