计算http开销和标头

时间:2014-06-27 14:32:02

标签: android http tcp

我想知道在通过AndroidHttpClient获取/发布请求请求数据时,是否有人可以帮助我计算开销。

我为什么这么问? 最近开发的应用在计算有效载荷和互联网提供商统计数据时显示不同的流量使 简单地说,我的应用程序发送/接收的所有数据都是6MB,但提供商显示16.这是> 200%。

由于所有通信都是通过一个功能完成的,因此我可以跟踪所有有效负载大小,并且额外的大小必须是开销。但它真的那么大,或者我错过了什么? 这是一个功能:

public byte[] get(final String url, int timeout) throws ClientProtocolException, IOException {

        URI uri;
        try {
            uri = new URI(url);
        } catch (URISyntaxException e) {
            lastError = ERROR_URL;
            e.printStackTrace();
            return null;
        }

        out += uri.toString().length();

        final HttpGet get = new HttpGet(uri);
        HttpConnectionParams.setSoTimeout(httpParameters, timeout);
        HttpConnectionParams.setConnectionTimeout(httpParameters, timeout);
        get.setParams(httpParameters);

        HttpResponse responce;
        final long st = System.currentTimeMillis();
        responce = client.execute(get, localContext);
        ping = (int) (System.currentTimeMillis() - st);

        InputStream is = responce.getEntity().getContent();

        byte[] data = inputStreamToByteArray(is);
        responce.getEntity().consumeContent();
        in += data.length;
        lastError = ERROR_SUCCESS;

        return data;

    }

IPOverhead = 26个字节; TCPOverhead = 20个字节;

现在HTTP进来了,但是如何衡量它的开销呢?

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

HTTP的开销只是由状态行+标题组成 使用Android的Apache HttpResponse允许获取状态行和标题(使用getStatusLinegetAllHeaders(),但是以解析的方式,而不是原始文本。状态行和标题都是统一定义的(分别由RFC2616§6.1和§4.2),但它们可能有任意数量的(未解析的)空格,因此我们只能粗略地确定这里的开销。

除非使用其他API或原始Android Sockets(这需要实现您自己的HTTP处理),否则您只有一半。