gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:14:14 26 4
gpt4 key购买 nike

在发出 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com