1. 程式人生 > >Android HttpURLConnection Accept-Encoding: gzip 版本問題

Android HttpURLConnection Accept-Encoding: gzip 版本問題

Android 官方文件對 HttpURLConnection 的 Performance 的描述有一段:

By default, this implementation of HttpURLConnection requests that servers use gzip compression

參見: http://developer.android.com/reference/java/net/HttpURLConnection.html

就是說 使用HttpURLConnection發請求時,預設的request hearder裡會加上 Accept-Encoding: gzip

這是坑!!!

因為Android的這個Feature是在Gingerbread(android 2.3.3) 版本以後才加上的, 而這一點並未在其官方API中註明。

所以同樣的應用,在低版本的android上,發出的是非gzip的請求,而在高版本的android上發出的是gzip的請求,這樣在server端處理時,就要特別小心相容兩類情況。

(我們因此出了一個大bug。)

下面是另外一篇文章中提到的:

In Gingerbread, we added transparent response compression. HttpURLConnection will automatically add this header to outgoing requests,
 and handle the corresponding response:

Accept-Encoding: gzip
參見: http://android-developers.blogspot.com/2011/09/androids-http-clients.html


如果不想處理這些問題,也可以棄用 HttpURLConnection 而改用 Apache Http Client, 它傳送的都是非gzip型別的請求,與android版本無關。