如何在本地测试socket.io上的https?

时间:2018-05-04 21:26:06

标签: javascript socket.io

我使用socket.io实现了一个应用程序。一切都很好。 将其转换为渐进式网络应用程序需要SSL,因此我已经完成了这项工作,而且工作得很好。该应用程序将作为Web应用程序安装并运行。

我的问题是,当我重新开始处理新功能时,app服务器的本地安装会忽略我的安全客户端请求(在生产系统上,nginx会处理SSL)。

这些是客户端中的违规行:

const socket_url = 'https://' + url.hostname + ':' + port;
const socket = openSocket(socket_url, {query: 'clientId=' + clientId, secure: true});

可以在生产与本地开发中有条件地编辑客户端中的相关行,但我希望有一个更优雅的解决方案。

1 个答案:

答案 0 :(得分:1)

有关处理测试环境与生产环境问题的几点想法:

  1. 您可以获得自签名证书并在您的https服务器上本地使用它,并让您的测试浏览器信任它。然后,您在本地运行https。当然,在测试环境中运行时,您也必须调整服务器代码以成为https服务器。
  2. 您可以使用自签名证书在本地设置自己的NGINX,并使其提供与生产中相同的https角色。
  3. 在本地运行时,您的服务器可能会生成略有不同的网页,在您在问题中显示的代码中插入http://而不是https://,以便客户端自动使用所需的协议(https在生产和http测试中)。这可以通过模板引擎完成,也可以在提供相关脚本时通过搜索/替换手动完成。
  4. 客户端Javascript可以使用location.protocol而不是硬代码https,后者将自动使用加载网页的协议,然后可以是http或https。因此,如果网页是通过http加载的,那么socket.io将使用http。如果网页是通过https加载的,那么socket.io将使用https。