2011-12-12 26 views
6

私はGAEサーバーからの応答をgzipしようとしていますが、Content-Encodingではnullを受け取ります。AppEngine gzip圧縮

私は次のコードを持っている:

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()); 

を私はGAEサーバ上で自動的に圧縮しないことを読みました。それでは、何が問題なのでしょうか?

+0

GAEは、あなたがそれを圧縮するかどうかの通知を受けません。この場合のファイルの大きさはどれくらいですか?経験から、1MBを超えるものは決して圧縮されません。 – David

答えて

9

App Engineのフロントエンドサーバは、応答を圧縮するかどうかを判断するために、Accept-EncodingUser-Agentのヘッダを含む多くの要因に依存しています。これは、gzipレスポンスを受け入れると主張している多くのユーザーエージェントが存在するためですが、実際には理解できません。

ユーザエージェントを賢明なものに設定してみてください(実際のユーザエージェントではない 'gzip'ではなく)。

+6

https://developers.google.com/appengine/kb/general#compression states "gzipされたコンテンツを強制的に配信するには、クライアントはAccept-EncodingとUser-Agentの両方のリクエストヘッダーの値として 'gzip'を指定します。 "一部の人はそれが働いていると報告し、他の人はそれを報告しない基本的に、誰も本当の答えを知りません。 – David

+0

「Accept-Encoding:gzip」を送信するようにクライアントを変更しましたが、App Engineは依然として非圧縮で応答しました。その後、gzipをUAに追加しました。 'User-Agent:Our Real UA String; (Accept-Encoding:gzip'と一緒に)最終的にApp Engineに圧縮された応答をさせました。 –

+0

リクエストで送信せずにこれを行うことはできますか?これらの値をコード内に設定するのはどうですか? –