android - http 服务器不遵守接受编码 : gzip unless User-Agent is known browser

标签 android http gzip user-agent

在发出 HTTP 请求时,我设置了 Accept-Encoding: gzip。但是,我注意到服务器实际上并没有压缩响应,除非 User-Agent 是“众所周知的”。我有以下演示问题的 Android 代码,它使用我很棒的用户代理获取“http://www.google.com”,并检查响应是否被压缩:

    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setUserAgent(params, "MyApp/1.0 (Awesome)");

    DefaultHttpClient client = new DefaultHttpClient(params);       
    HttpGet request = new HttpGet("http://www.google.com");
    request.setHeader("Accept-Encoding", "gzip");

    HttpResponse response = client.execute(request);
    HttpEntity entity = response.getEntity();
    Header header = entity.getContentEncoding();
    boolean isCompressed = false;
    if (header != null) {
        HeaderElement[] codecs = header.getElements();
        for (int i = 0; i < codecs.length; i++) {
            if (codecs[i].getName().equalsIgnoreCase("gzip")) {
                isCompressed = true;
                break;
            }
        }
    }

    if (isCompressed)
        Log.i(TAG, "IT IS COMPRESSED");
    else
        Log.i(TAG, "IT IS NOT COMPRESSED");

运行这段代码会打印出“它没有被压缩”:(

但如果我将用户代理设置为 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0",它会输出“IT IS COMPRESSED”。

我知道是否实际压缩是服务器的选择,但为什么要根据“User-Agent”进行选择?无论用户代理如何,我是否应该发送任何其他 header 选项来哄骗服务器进行压缩?

编辑:

我知道在处理 Accept-Encoding header 的过程中没有代理/等,因为当我得到 http://1.cgi.browserscope.net/cgi-bin/resource.cgi?headers =1,我看到正确接收了 Accept-Encoding header

最佳答案

它几乎可以肯定是这样做的,因为一些遗留的用户代理广告支持 GZIP 然后无法正确解压缩内容。出于这个原因,已知某些服务器端框架仅向已知不会遭受此类错误的客户端发送压缩响应。

关于android - http 服务器不遵守接受编码 : gzip unless User-Agent is known browser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7140035/

相关文章:

Android:ImageView.ScaleType 但用于按钮和/或单选按钮

c# - 在 Chrome 响应式模拟器中重定向更改用户代理

objective-c - 在 UIWebView 上获取 HTTP 响应 header

java - 如何为 http 代理配置 netty 管道

c# - AddResponseCompression 不适用于 .NET Core 3.1 Controller

c# - 在 C# 中将 GZIP 添加到 WCF REST 服务

java - 使用多个 ViewPager 制作 Activity

android - 以交互方式设置屏幕锁定设置

node.js - 我应该为 WebP 图像启用 GZIP 压缩吗?

android - 如何在android、phonegap和jquerymobile中通过javascript在提交表单时调用ajax函数