0

所以我试图在不使用 SocketChannels 和 SSLEngine 的情况下在 java 中构建一个 HTTPS 服务器。我的主要原因是当我使用 com.sun 包装构建并对其进行测试时,很多请求超时,如果他们确实响应,他们大约需要 2 分钟(在调试器处理程序中甚至需要 2 分钟才能被调用)我构建了一个 HTTP 服务器并且请求下降到 200 毫秒,但我需要 HTTPS,当我添加 SSLEngine 并打开请求时,它看起来像 HTTP 的普通标头,请求看起来像这样:

GET / HTTP/1.1
Host: localhost
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8

基于此,该请求似乎未使用 HTTPS(Chrome 也表示网站不安全)并且未请求升级。我如何告诉客户升级?我读过的所有页面都说客户端应该请求升级,如果我尝试发送 426 代码标头(需要升级),服务器只会关闭连接并显示我发送的消息。

4

1 回答 1

0

答案很简单,localhost 证书在任何情况下都无效,我为我的网站制作了证书并在外部进行了测试,并且能够得到正确的响应。据我所知,服务器无法 100% 地请求客户端更改协议。

于 2017-07-11T03:53:15.573 回答