使用ReactorClientHttpConnector时如何禁用请求头字符合法性校验
关闭WebClient请求头禁用字符校验方案
问题根因
你使用ReactorClientHttpConnector搭配Netty HttpClient的默认配置会开启HTTP请求头合法性校验,会拦截包含\u0000等不符合HTTP规范字符的头值,抛出对应IllegalArgumentException异常。
实现代码
直接调整HttpClient的请求解码器配置,关闭头校验即可,修改后的配置如下:
import io.netty.handler.codec.http.DefaultHttpHeadersFactory; import reactor.netty.http.client.HttpClient; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.http.client.reactive.ReactorClientHttpConnector; public WebClient webClient() { HttpClient httpClient = HttpClient.create() // 配置请求解码器,关闭HTTP头合法性校验 .httpRequestDecoder(spec -> spec.headersFactory( DefaultHttpHeadersFactory.headersFactory() .withValidation(false) )); return WebClient.builder() .clientConnector(new ReactorClientHttpConnector(httpClient)) .build(); }
注意事项
风险提示:关闭HTTP头校验属于违反HTTP标准规范的操作,仅可在业务确有需要、且对接的目标服务能兼容处理特殊头字符的场景下使用,否则可能导致请求解析失败、数据错乱等未知问题。
内容的提问来源于stack exchange,提问作者Artyom Panfutov
相关产品推荐
相关产品推荐

