从 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 许可协议。转载请注明出处!