我正在使用最新版本的spark-java(2.9.1(开发一个REST API。该项目有一个静态页面(index.html(,通过REST API进行交互,并使用typescript将一些数据加载到页面中。最近我通过调用"secure(("添加了安全性。事实是中的页面https://localhost:4567正在工作很好,但如果我尝试加载http://localhost:4567我看到服务器发送了一些二进制数据,这些数据在导航器中看起来很糟糕。
这就是我所做的重现问题:
edu@Edu-HP:$curl-ihttp://localhost:4567>ppp
%总接收百分比Xferd平均速度时间时间电流Dload上传总花费左速度
100 14 0 14 0 0 3500 0--:----:--:--3500
edu@Edu-HP:$hd ppp
0000000015 03 03 00 02 02 50 |。。。。。。P|
0000000 7
请注意,生成的输出由6个二进制字节组成。我不知道它是否按预期工作,或者框架是否有任何问题。我本以为会看到一些http错误代码,也许我错了。。如果你在导航器上试试,你会看到一些奇怪的字符。。
我启用了jetty日志,我看到的是抛出了以下异常:
javax.net.ssl.SSLException:无法识别的ssl消息,明文连接?
我想这很正常,但请告诉我是否有我没有发现的例外。。
我将感谢的任何帮助
您正在使用HTTP请求访问HTTPS站点。通常一个TCP端口一次只提供纯文本HTTP或SSL/TLS加密的站点,而不是同时提供这两个。
通常,服务器端可以检查第一个接收到的数据,检查它是HTTP请求还是SSL/TLS握手,并自动切换到正确的协议,但在HTTP(S(服务器中这样的实现非常罕见。
在您的情况下,错误是由以下问题引起的:客户端发送纯文本HTTP请求,但服务器期望SSL/TLS握手提供client_HELLO。因此,它用一些二进制数据回答——很可能是收到了无效数据的SSL/TLS警报消息。
结论:
当与HTTPS服务器交谈时,使用HTTPS协议,即使它运行在localhost上。如果您想在不使用HTTPS的情况下进行测试,请使用HTTP端口(根据服务器配置,如果默认情况下只打开HTTPS端口,则可能需要添加纯文本HTTP端口(。