- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我围绕 Java 的 HttpsServer
创建了一个最小的应用程序.
我已经安装了一个 HttpHandler
用短文本消息回复请求:
return exchange -> {
try {
OutputStream responseBodyStream = exchange.getResponseBody();
byte[] response = "Trouble with HTTPS and curl\n"
.getBytes(StandardCharsets.UTF_8);
exchange.getResponseHeaders().set("Content-Type", "text/plain");
exchange.sendResponseHeaders(200, response.length);
responseBodyStream.write(response);
responseBodyStream.close();
// Note that exchange.close() also closes the exchange's input stream
// and output stream
} catch (Exception e) {
log.warn("Could not handle request", e);
}
};
当使用 curl 连接到服务器时,服务器有响应,但 Java 进程一直在使用整个核心,从而导致服务器无响应。
正是这一行触发了问题:
responseBodyStream.close();
如果我们删除该行,服务器将继续工作。
来自docs :
In order to correctly terminate each exchange, the output stream must be closed, even if no response body is being sent.
我创建了 a project to reproduce问题。
到目前为止我发现的一些潜在线索:
HTTP-Dispatcher
中的SSLEngineImpl#writeRecord
分配了很多对象我在 Arch Linux 5.1.7 上使用 OpenJDK 12.0.1+12。 curl的版本是7.65.1。
这是 JDK 中的错误吗?还是我使用 HttpsServer
的方式不对?
最佳答案
我也可以重现这个问题。SSLStreams.doClosure
中存在无限循环 - 这绝对是 JDK 错误。
HttpsServer 在 JDK 10 中运行良好,但在 JDK 11 中开始循环。我猜问题是 HttpsServer 实现尚未适应 JDK 11 中出现的 TLS v1.3 半关闭策略。
幸运的是,有一个解决方法。添加 -Djdk.tls.acknowledgeCloseNotify=true
JVM 选项。使用此选项 HttpsServer 将按预期工作。参见 JDK-8208526了解详情。
关于java - HttpsServer 使用 curl 导致 100% CPU 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708300/
我正在使用以下 HttpsServer 来实现一个简单的安全服务器。首先,我创建了 keystore 并生成了 key 对,并且在 keystore 中有一个自签名证书。我正在使用以下代码来设置代码。
我已经用 Java 设置了一个 HttpsServer。我所有的沟通都完美无缺。我设置多个上下文,加载自签名证书,甚至基于外部配置文件启动。 我现在的问题是让多个客户端能够访问我的安全服务器。为此,我
我已经安装了带有自签名证书的简单 HttpsServer。“JCE Unlimited Strength Jurisdiction Policy”文件与 Bouncy CaSTLe 安全提供程序一起安
我正在运行 Java 8 并使用 com.sun.net.httpserver.HttpsServer 创建一个 HTTPS 服务器。我有一个在 Java KeyStore 中使用受信任的 CA 签名
我合并了client-certificate-with-com-sun-net-httpserver-httpsserver与 simple-java-https-server但我总是收到错误消息
我正在使用 PHP (codeigniter)、Jquery 开发应用程序。由于多种原因,我不得不在客户端桌面部署一个 Java 桌面应用程序,并且我通过 Jquery 的 $.get 函数获得响应。
我使用 Sun Ws 实现编写了一个 Web 服务服务器,并使用 HttpsServer 进行发布(TLS 相互身份验证)。 httpServer=HttpsServer.create
我想要求使用基于 Java 1.7 内置的服务器的客户端证书身份验证 HttpsServer. 我似乎找不到任何方法让服务器无法通过身份验证。它会愉快地向所有旧客户端提供数据,无论其客户端证书是受信任
使用大量谷歌搜索的各种结果,我设法制作了一个 Java 类来处理从 LetsEncrypt 下载证书,非常简洁。 (可用 here 如果有人感兴趣) 有了它,我在一个文件夹中得到了这个内容作为输出:
我围绕 Java 的 HttpsServer 创建了一个最小的应用程序. 我已经安装了一个 HttpHandler用短文本消息回复请求: return exchange -> { try {
我正在尝试用 Java 实现一个 HTTPS (SSL) 服务器,我想利用 com.sun.net.httpserver.HttpsServer。 我已经能够从不同的地方拼凑一些有效的代码,但我希望能
我正在尝试将 comodo Positive SSL Multi-Site 证书加载到 Java 的 HttpsServer 中。我没有从代码中收到任何错误,但是当我尝试在浏览器中访问 URL 时,它
我是一名优秀的程序员,十分优秀!