我在java应用程序中使用Unirest进行API调用。 API 服务器是一个启用了压缩的 spring-boot 应用程序
server.compression.enabled=true
server.compression.mime-types=application/json
server.compression.min-response-size=1
这是我的 API 调用
HttpResponse<String> response = Unirest.post(url)
.header("Accept-Encoding", "gzip")
.header("Content-Type", "application/json")
.body(request)
.asString();
但是响应标头“Content-Type”始终为“application/json”
Unirest版本
<dependency>
<groupId>com.konghq</groupId>
<artifactId>unirest-java</artifactId>
<version>3.14.5</version>
</dependency>
我正在使用来自 Spring boot 应用程序 v.3.3.5 的 SSL 连接。
我尝试使用curl进行相同的调用
curl --request POST --url 'myurl' --header 'Accept-Encoding: gzip' --header 'Content-Type: application/json' --data 'jsonData' -i | less
回应
...
HTTP/1.1 200
vary: accept-encoding
Content-Encoding: gzip
Content-Type: application/json
...
我尝试了 Insomnia 客户端的相同 API 调用
> POST
...
> User-Agent: insomnia/2021.4.1
> Content-Type: application/json
> Accept-Encoding: gzip
回应:
< HTTP/1.1 200
< vary: accept-encoding
< Content-Encoding: gzip
< Content-Type: application/json
...
我还检查了 APi 服务器中的请求标头,它们都有“Accept-Encoding: gzip”。看起来它不仅仅适用于 Unirest。
我找到了答案。基于这 2 个 Unirest 问题:
Unirest(准确地说是 Apache Http 客户端)在底层解压缩文件,然后替换
Content-Encoding: gzip
。
我还在服务器端使用 Unirest 和非 Unirest 客户端测试了响应长度,无论有没有压缩,大小都是相同的。