You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vertx WebClient发送大小写敏感URI请求被服务器拒绝如何解决

根因说明

Vert.x 的 vertx-web-client 模块默认开启了URI自动标准化逻辑,部分版本的标准化流程会自动将路径中的字母转为小写,导致你传入的大写格式URI被篡改,触发服务端的大小写敏感校验逻辑被拒绝。

解决方案

方案1:调整WebClient初始化配置,禁用URI标准化

创建WebClient实例时,自定义HttpClientOptions关闭URI自动规范化开关即可保留原始URI的大小写:

import io.vertx.core.http.HttpClientOptions;
import io.vertx.ext.web.client.WebClient;

// 初始化自定义配置
HttpClientOptions clientOptions = new HttpClientOptions()
        .setNormalizeUri(false) // 核心配置:禁用URI自动规范化,不会自动转小写、不会自动处理路径符号
        .setSsl(true); // HTTPS请求需开启SSL,其他超时、连接池等参数按需配置

// 用自定义配置创建WebClient实例
WebClient client = WebClient.create(vertx, clientOptions);

配置修改后你原有请求方法的代码不需要调整即可正常使用。

方案2:使用绝对路径请求方法绕开规范化逻辑

如果配置调整后仍不生效,可以直接使用postAbs方法传入完整的请求URL,该方法默认不会对传入的URL做标准化处理,会直接保留原始大小写:

public CompletionStage<HttpResponse> post(String host, int port, String uri, MultiMap headers, JsonObject body) {
    // 自行拼接完整的HTTPS请求地址
    String fullRequestUrl = String.format("https://%s:%d%s", host, port, uri);
    return client.postAbs(fullRequestUrl)
            .putHeaders(headers)
            .timeout(requestTimeout.toMillis())
            .sendJsonObject(body)
            .toCompletionStage()
            .thenApply(response -> new HttpResponse(response.statusCode(), response.body() != null ? response.body().getBytes() : new byte[]{}));
}

注意事项

  • 禁用URI标准化后,你需要自行保证传入的URI格式合法性,WebClient不再自动修正多余斜杠、相对路径符../等问题。
  • 如果服务端同时对Host头的大小写敏感,你可以手动在headers中添加Host头指定正确大小写的域名,避免Vert.x自动生成时转小写。

内容的提问来源于stack exchange,提问作者Ali Hosseinzadeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:45:07