我正在尝试在我的Web服务上托管alexa技能。
出于测试目的,我使用ngrok生成https webservice网址。 我已将该网址添加到alexa配置中。
当我尝试测试服务时,我可以看到我的本地ngrok服务器收到如下请求。
GET /alexa/service/processrequest
Summary
Headers
Raw
Binary
GET /alexa/service/processrequest HTTP/1.1
Host: 9286ef9a.ngrok.io
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
X-Forwarded-Proto: https
X-Forwarded-For: 49.248.168.79
但是,它无法到达我正在通过Eclipse远程断点进行调试的Web服务/技能代码。 在ngrok中,我可以看到以下错误:
HTTP/1.1 400
Content-Type: text/plain;charset=ISO-8859-1
Connection: close
Bad Request
This combination of host and port requires TLS.
我已通过生成自签名证书将spring-boot配置为在https端口443上运行。相同的证书已上传到Alexa开发人员控制台。
如果我使用ngrok网址在Google chrome中点击我的网络服务网址,则会出现相同的错误:
但是,如果我在URL中使用localhost,则chrome能够检测到https,如下所示:
我无法找到根本原因。 这里有人可以帮助我吗?
答案 0 :(得分:0)
我已经找到问题的答案,并且正在发布它,以便它可以帮助其他人了解在上述情况下的处理方法。
Spring-boot在端口443上为我的Web服务创建https端点。 在chrome中,如果我使用 https URL击中该端口,则它可以正常工作,但是如果我使用 http URL击中该端口,则将出现错误,如上面的屏幕截图所示。 因此,总的来说, spring-boot表示应该在https端点处接收到一个请求 。
罪魁祸首是 NGROK 。 :-(
尽管,ngrok正在创建一个https端点以供公共访问,但它并未创建从ngrok客户端(在我的PC上运行)到tomcat服务器的https隧道。 使用- tls选项,ngrok支持https / tls隧道传输,但这仅在ngrok的付费计划中发生。
与ngrok类似,我也探索了localtunnel,但是它也存在 tls隧道的问题。
解决方法
由于我一直在调试本地计算机上的技能,因此我尝试了第2点here中提到的证书提供的其他选项。 此选项允许我仅将本地Web服务器用作http,而现在ngrok或localtunnel可以很好地支持它。 :-)
因此,按照我在开发期间启用调试Alexa Skill的步骤: