首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java HttpURLConnection VS Android HttpURLConnection

Java HttpURLConnection VS Android HttpURLConnection
EN

Stack Overflow用户
提问于 2014-03-23 03:13:49
回答 1查看 2K关注 0票数 6

我有一个运行在Windows上的简单代码:

代码语言:javascript
复制
URL url = new URL("http:xxx.xxx.xxx.xxx/api/cities.json");
HttpURLConnection connexion = (HttpURLConnection) url.openConnection();
connexion.setRequestMethod("GET");

System.out.println("response " + connexion.getResponseCode());
connexion.connect();

InputStream is = connexion.getInputStream();

for (String header : connexion.getHeaderFields().keySet()) {
    System.out.println(header + ":" + connexion.getHeaderField(header));
}

给出这些头

代码语言:javascript
复制
response 200
null:HTTP/1.1 200 OK
X-Frame-Options:SAMEORIGIN
Access-Control-Allow-Origin:*
Vary:Accept-Encoding
Date:Sun, 23 Mar 2014 03:00:06 GMT
Content-Length:1894
Connection:keep-alive
Content-Type:application/json
Server:nginx

和Android上相同的代码给出了这些标题

代码语言:javascript
复制
03-22 23:10:35.405: I/System.out(23707): null:HTTP/1.1 200 OK
03-22 23:10:35.405: I/System.out(23707): Access-Control-Allow-Origin:*
03-22 23:10:35.405: I/System.out(23707): Connection:keep-alive
03-22 23:10:35.405: I/System.out(23707): Content-Type:application/json
03-22 23:10:35.405: I/System.out(23707): Date:Sun, 23 Mar 2014 03:10:35 GMT
03-22 23:10:35.405: I/System.out(23707): Server:nginx
03-22 23:10:35.405: I/System.out(23707): Vary:Accept-Encoding
03-22 23:10:35.405: I/System.out(23707): X-Android-Received-Millis:1395544235409
03-22 23:10:35.405: I/System.out(23707): X-Android-Response-Source:NETWORK 200
03-22 23:10:35.405: I/System.out(23707): X-Android-Selected-Transport:http/1.1
03-22 23:10:35.405: I/System.out(23707): X-Android-Sent-Millis:1395544235363
03-22 23:10:35.405: I/System.out(23707): X-Frame-Options:SAMEORIGIN

我只是找不到内容长度的标题了。我.我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-23 06:19:17

Android HttpURLConnection为您做了一些神奇的事情,比如缓存和gzip处理。

因此,如果不设置Accept-Encoding: identity,则HUC设置Accept-Encoding: gzip,deflate。而且,由于nginx是一个智能的好东西,它可能会交付您的响应gzip编码。您没有告诉HUC在压缩回您的时候给出响应,但是它为您解压了响应,并降低了标题,因为这是误导性的。

您可以将这看作是一个强大的特性,可以节省带宽和无线功耗,而无需安卓程序员处理gzipdeflate编码。

如果您只是将响应流到您的JSON解析器,您将得到正确大小的未压缩数据,尽管事先不知道大小。

您可以通过运行wiresharktcpdump服务器端来验证我说的话,或者如果您有一个有根的Android设备,也有一些方法可以实现这个客户端。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22586614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档