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

HttpURLConnection在Oracle JDK11.0.1正常但OpenJDK11.0.8无法运行问题咨询

HttpURLConnection Oracle JDK与OpenJDK版本兼容性问题解决方案
  • 请求头校验逻辑差异
    OpenJDK 11.0.8收紧了HTTP请求头的合法性校验规则,RSA加密生成的password值、HMAC-SHA256生成的authentication值如果包含未处理的换行、控制字符、非法空白符,会被直接拦截,而Oracle JDK 11.0.1的校验逻辑较为宽松不会触发拦截。
    解决方法:加密后的字节数组做Base64编码时使用无换行、无额外填充的编码方式,示例代码:Base64.getEncoder().withoutPadding().encodeToString(encryptedBytes),编码后再过滤掉所有不可见字符再存入请求头。
  • 加密实现提供者差异
    Oracle JDK与OpenJDK默认的JCE加密实现提供者不同,未指定provider时调用Cipher.getInstance("RSA/ECB/PKCS1Padding")、Mac.getInstance("hmacSHA256")可能加载到不同的实现类,出现填充逻辑、输出结果不一致的问题。
    解决方法:获取加密实例时明确指定标准provider,修改为:
    Cipher.getInstance("RSA/ECB/PKCS1Padding", "SunJCE")
    Mac.getInstance("HmacSHA256", "SunJCE")
  • 受限请求头配置差异
    OpenJDK 11.0.8默认开启了受限请求头拦截规则,禁止修改Host、Connection等内置请求头,若你的代码中有修改这类请求头的操作会被直接拒绝。
    解决方法:JVM启动参数添加-Dsun.net.http.allowRestrictedHeaders=true关闭该限制,验证是否是该配置导致的异常。

问题相关请求头设置代码:

connection.addRequestProperty("username", "test");
connection.addRequestProperty("password", "XXX");
connection.addRequestProperty("timestamp", "2021-03-08T11:24:16.698+0000");
connection.addRequestProperty("caller", "Test Rest Client/");
connection.addRequestProperty("authentication", "XXX");
connection.addRequestProperty("Content-Type", "application/json");

内容的提问来源于stack exchange,提问作者Manish Prajapati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 02:18:02