在Android4.4以后底层是由OkHttp实现的,所以4.4之后的版本,Content-Length被移除,getContentLength()为 -1。
OkHttp是默认支持gzip解压缩的,不需要额外配置的。
OkHttp会额外的增加很多请求头信息,如果我们在代码里没有手动设置Accept-Encoding = gzip ,那么OkHttp会自动处理gzip的解压缩。具体源码可以查看BridgeInterceptor这个类,如果header中没有Accept-Encoding,默认自动添加,且标记变量transparentGzip为true。
OkHttp在处理请求结果时,如果成功返回,并获取到内容,则移除Content-Encoding、Content-Length,并对结果进行解压缩。
在OkHttp中,如果在请求头添加addHeader(“Accept-Encoding”, “gzip, deflate”),Okhttp不会帮你处理Gzip的解压,需要你自己去处理。
OkHttp默认使用gzip压缩,但是会把返回数据的大小length修改为-1,我们如果想获取一些进度或者大小相关的信息,就会出现问题,这时可以手动设置"Accept-Encoding"字段,手动来解析gzip压缩后的数据。
-
OkHttp是默认支持gzip解压缩的,不需要额外配置。
-
默认情况下,OkHttp在处理请求结果时,会对结果进行自动解压处理。
-
自动解压时移除Content-Length,所以上层代码想要contentLength时为-1
-
我们可以手动设置"Accept-Encoding"字段,来解除OkHttp自动对gzip的相关处理。
-
手动手动设置"Accept-Encoding"字段,OkHttp不负责对返回数据的解压缩。
gzip
是GNUzip的缩写,它是一个GNU自由软件的文件
压缩
程序。
HTTP
协议上的
GZIP
编码是一种用来改进WEB应用程序性能的技术。一般服务器
中
都安装有这个功能模块的,服务器端不需做改动。
当浏览器支持
gzip
格式的时候, 服务器端会
传输
gzip
格式的数据。
从
Http
技术细节上讲,就是
http
request 头
中
有 “Accept-Encoding”, “
gzip
” ,response
中
就有返回头Content-Encoding=
gzip
我们现在从浏览器上访问玩啥网站都是
gzip
格式
传输
的。
但是我们现在
Android
客户端,没有用
Gzip
http
数据
传输
,body
压缩
。节省流量
Android
开发
中
网络
请求的
压缩
──
GZip
的
使用
http
client对post内容
gzip
压缩
和server端解压接收
Android
中
使用
gzip
传递数据以上是参考资料下面是我测试效果fiddler 抓包代码public static void reqeust(String pUrl) {
URL url;
源码ok
http
,
HTTP
是现代
网络
程序的数据
传输
协议,它展示设备和服务器之间是如何
传输
数据和媒体文件。高效的
使用
HTTP
协议可以让你的应用运行的更快、节省更多流量。OK
HTTP
应运而生,它是Square的一个开源库。
OK
HTTP
具有如下特性:
1.支持SPDY,在主机上共享一个Socket处理所有请求。
2.
使用
连接池来减少请求延迟(当SPDY不可用的情况下)。
3.无缝的支持
GZIP
以减少下载量。
4.超高速缓存避免重复的请求。
OK
HTTP
能够处理很多
网络
问题:自动修复很多常用的连接问题。如果你的服务拥有多个IP地址,一旦第一个连接失败,OK
HTTP
会
使用
其他的备份地址,对于处理驻留在冗余数据
中
心的IPV4+IPV6和托管服务,这是必备的技术。OK
HTTP
还能修复有问题的代理服务器和失败的SSL握手问题。
不需要额外编写
网络
代码即可在您的程序
中
使用
OK
HTTP
。OK
HTTP
实现了类似于iava.net.
Http
URLConnection API的核心模块,另外ok
http
-apache模块实现了Apache
Http
client API。
OK
HTTP
支持
Android
2.2及以上版本,对于
JAVA
,则需要
JAVA
1.5以上。
gzip
是一种数据格式,默认且目前仅
使用
deflate算法
压缩
data部分;
Gzip
是一种流行的文件
压缩
算法,现在的应用十分广泛,尤其是在Linux平台。当应用
Gzip
压缩
到一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小。这取决于文件
中
的内容。
利用Apache
中
的
Gzip
模块,我们可以
使用
Gzip
压缩
算法来对Apache服务器发布的
请求
压缩
:请求时
使用
GZIP
OutputStream对数据进行
压缩
处理响应时
使用
GZIP
InputStream对数据进行解
压缩
处理 public static byte[] compress(String str) throws IOException {
try (ByteArrayOutputStream out = new ByteArrayOutputStream()...
public static final String
GZIP
_ENCODE_UTF_8 = "UTF-8";
public static final String
GZIP
_ENCODE_ISO_8859_1 = "ISO-8859-1";
private static final char ARRAY_LEFT = ...
Ok
Http
包的设计和实现的首要目标是高效。这也是选择 Ok
Http
的重要理由之一。Ok
Http
提供了对最新的
HTTP
协议版本
HTTP
/2 和 SPDY 的支持,这使得对同一个主机发出的所有请求都可以共享相同的套接字连接。如果
HTTP
/2 和 SPDY 不可用,Ok
Http
会
使用
连接池来复用连接以提高效率。Ok
Http
提供了对
GZIP
的默认支持来降低
传输
内容的大小。Ok
Http
也提供了对
HTTP
响应的缓存机制,可以避免不必要的
网络
请求。当
网络
出现问题时,Ok
Http
会自动重试一个主机的多个 IP 地址。
(Ok
Http
的GitHub主页:
http
s://githu
http
是现在主流应用
使用
的
网络
请求方式, 用来交换数据和内容, 有效的
使用
HTTP
可以使你的APP 变的更快和减少流量的
使用
Ok
Http
是一个很棒
HTTP
客户端(GitHub主页:
http
s://github.com/square/ok
http
):
支持SPDY, 可以合并多个到同一个主机的请求
使用
连接池技术减少请求的延迟(如果SPDY是可用的话)
使用
GZIP
压缩
减少
传输
的数据量
缓存响应避免重复的
网络
请求
当你的
网络
出现拥挤的时候,就是OK
Http
大显身手的时候, 它可以避免常见的
网络
问题,如果你的服务是部署在不同的IP上面的,如果第一个连接失败, OkHT
接下来,让我解说一下如何在
Android
系统
中
使用
gzip
进行数据传递
HTTP
协议上的
GZIP
编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常
使用
GZIP
压缩
技术来减少文件大小,减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过
网络
传输
文件时,可以减少
传输
的时间。作者在写这篇博客时经过测试,4.4MB的文本数据经过
Gzip
传输
到客户端之后变为392KB,
压缩
效率极高。 一.服务端 服务端有2种方式去
压缩
,一种可以自己
压缩
,但是更推荐第二种方式,用PrintWriter作为输出流,工具类代码如下 代码如下: /** * 判断浏览器是否支持
gzip
压缩
* @p
http
.createServer(function (req, res) {
// 获取Accept-Encoding头
var encoding = req.headers['accept-encoding'];
// 如果浏览器支持
gzip
压缩
if (encoding.indexOf('
gzip
') >= 0) {
res.writeHead(200, { 'Content-Encoding': '
gzip
' });
// 对响应内容进行
gzip
压缩
var
gzip
= zlib.create
Gzip
();
fs.createReadStream('file.txt').pipe(
gzip
).pipe(res);
} else {
res.writeHead(200, {});
fs.createReadStream('file.txt').pipe(res);
}).listen(3000);
在这段代码
中
,首先获取浏览器发送的"Accept-Encoding"请求头,然后检查是否支持
gzip
压缩
。如果浏览器支持
gzip
压缩
,则设置响应头"Content-Encoding"为"
gzip
",并
使用
zlib模块的create
Gzip
()方法对响应内容进行
gzip
压缩
。如果浏览器不支持
gzip
压缩
,则直接将文件内容发送给浏览器。