2011-12-12 11 views
6

Próbuję gzip odpowiedzi z serwera GAE, ale otrzymuję null w Content-Encoding.AppEngine kompresowanie gzip

Mam następujący kod:

connection = (HttpURLConnection)url.openConnection(); 
connection.setRequestMethod("POST"); 
connection.setRequestProperty("Content-Type", 
      "application/json; charset=utf-8"); //"application/json; charset=utf-8" 
connection.setRequestProperty("Accept-Encoding", "gzip"); 
connection.setRequestProperty("User-Agent", "gzip"); 
connection.setUseCaches (false); 
connection.setDoInput(true); 
connection.setDoOutput(true); 

//write 
//read 

System.out.println("Content-Encoding " + connection.getContentEncoding()); 

Czytałem, że na serwerach GAE temat kompresji automatycznie. Więc jaki może być problem?

+0

GAE nie zwraca uwagi na to, czy poprosisz o kompresję, czy nie. Jak duży jest w tym przypadku plik? Z doświadczenia nic ponad 1 MB nie jest nigdy kompresowane. – David

Odpowiedz

9

Serwery frontendów App Engine zależą od wielu czynników, w tym nagłówków Accept-Encoding i User-Agent, aby określić, czy powinny one kompresować odpowiedzi. Robią to, ponieważ istnieje wiele agentów użytkownika, którzy twierdzą, że akceptują spakowane odpowiedzi gzip, ale w rzeczywistości ich nie rozumieją.

Spróbuj ustawić swojego klienta użytkownika na coś sensownego (a nie "gzip", który nie jest rzeczywistym klientem użytkownika) i zobacz, czy to ma znaczenie.

+6

https://developers.google.com/appengine/kb/general#compression states "Aby wymusić obsłużenie spakowanej treści gzip, klienci mogą podawać" gzip "jako wartość zarówno nagłówków żądania Accept-Encoding, jak i User-Agent request. ". Niektórzy twierdzą, że działa, a inni nie. Zasadniczo nikt nie zna prawdziwej odpowiedzi. – David

+0

Zmodyfikowano klienta w celu wysłania polecenia "Accept-Encoding: gzip", ale App Engine wciąż nieskompresował odpowiedzi. Następnie dołączamy gzip do UA, 'User-Agent: Nasz prawdziwy łańcuch UA; gzip' i to (wraz z 'Accept-Encoding: gzip') w końcu wymusiły na App Engine skompresowanie. –

+0

Czy możemy to zrobić bez wysyłania zapytania? jak ustawienie tych wartości w kodzie? –