从 Java 11 开始,Java 提供了新的 HttpClient 类来进行 HTTP 请求。在 HttpClient 中,某些头部字段被视为受限制的头部字段,其中包括 "Connection" 头部字段。
当你尝试设置 "Connection" 头部字段时,会抛出 IllegalArgumentException 异常,提示该头部字段受限制。
Connection请求头。那肯定不行啊!所以请看方式2
HttpClient吧!我选择的替代方案是okhttp
chrovyimplementation("com.squareup.okhttp3:okhttp:4.9.1")
xml<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.1</version>
</dependency>
我查看Java17源码中,底层禁止设置的请求头(header)有"connection", "content-length", "expect", "host", "upgrade" ,而且没有找到能跳过校验的方式。
java    private void checkNameAndValue(String name, String value) {
        requireNonNull(name, "name");
        requireNonNull(value, "value");
        if (!isValidName(name)) {
            throw newIAE("invalid header name: \"%s\"", name);
        }
        if (!Utils.ALLOWED_HEADERS.test(name, null)) {
            throw newIAE("restricted header name: \"%s\"", name);
        }
        if (!isValidValue(value)) {
            throw newIAE("invalid header value: \"%s\"", value);
        }
    }
其中ALLOWED_HEADERS校验的header默认有("connection", "content-length", "expect", "host", "upgrade")
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!