怎么解决zuul网关feign调用接口报错:“Transfer-encoding header already present”?
时间: 2024-10-24 13:03:54 浏览: 13
cxf-spring-cloud-netflix-docker:示例项目结合了Spring Boot应用和Spring Cloud Netflix(Eureka,Zuul,Feign)和cxf-spring-boot-starter
遇到 "Transfer-encoding header already present" 这样的错误通常是由于 Zuul 网关和 Feign 调用之间存在编码冲突。Feign 默认会自动设置 Transfer-Encoding 头,而某些服务可能已经设置了这个头,导致了重复。
解决这个问题的步骤如下:
1. **禁用自动处理**:在 Feign 的配置文件(如 application.yml 或 application.properties)中,可以尝试关闭自动处理 `Content-Length` 和 `Transfer-Encoding`。例如,在 YAML 中添加:
```yaml
feign:
httpclient:
config:
default:
allowPooling: true
followRedirects: true
disableAutoEncoding: true
```
或者在 Java 中使用 `@RequestLine` 注解:
```java
@RequestLine(value = "GET /endpoint", encoding = false)
```
2. **检查服务器响应**:确认目标服务是否允许同时包含这两个头部信息。如果不行,你需要调整服务器端的行为。
3. **异常处理**:在客户端(Zuul 或其他应用)捕获此类异常,并提供适当的错误处理策略,比如记录日志、返回用户友好的错误消息或者重试请求。
阅读全文