OpenFeign/feign

java.lang.IllegalArgumentException: Deflate Content-Encoding is not supported by feign-hc5

Open

#2,460 opened on 2024年6月27日

GitHub で見る
 (3 comments) (0 reactions) (0 assignees)Java (1,911 forks)batch import
help wantedwaiting for feedback

Repository metrics

Stars
 (9,070 stars)
PR merge metrics
 (平均マージ 2d 17h) (30d で 71 merged PRs)

説明

When we upgraded to spring-boot-dependencies-3.3.0, we also upgrade the spring-cloud according to https://spring.io/blog/2024/05/31/spring-cloud-2023-0-2-oss-and-2022-0-7-enterprise-have-been-released, Then my service met error "Caused by: java.lang.IllegalArgumentException: Deflate Content-Encoding is not supported by feign-hc5"

Here is some finding of troubleshooting:

As we set spring.cloud.openfeign.compression.request.enabled=true, so the FeignContentGzipEncodingInterceptor(spring-cloud-openfeign-core-4.1.2) is enabled too

public class FeignContentGzipEncodingInterceptor extends BaseRequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        if (requiresCompression(template)) {
		addHeader(template, HttpEncoding.CONTENT_ENCODING_HEADER, HttpEncoding.GZIP_ENCODING,
					HttpEncoding.DEFLATE_ENCODING);
	}
    }
}

If the compression condition matched, it will add fixed header(Content-Encoding: gzip,deflate), but after the PR https://github.com/OpenFeign/feign/pull/2247, it will throw IllegalArgumentException once 'deflate' exists in header 'Content-Encoding'

if (headerName.equalsIgnoreCase(Util.CONTENT_ENCODING)) {
        isGzip = headerEntry.getValue().stream().anyMatch(Util.ENCODING_GZIP::equalsIgnoreCase);
        boolean isDeflate =
            headerEntry.getValue().stream().anyMatch(Util.ENCODING_DEFLATE::equalsIgnoreCase);
        if (isDeflate) {
          // DeflateCompressingEntity not available in hc5 yet
          throw new IllegalArgumentException(
              "Deflate Content-Encoding is not supported by feign-hc5");
        }
      }

I think it is incompatible change, @fbus or term, Please take a look on it

コントリビューターガイド