WebSocket网络错误:OSStatus错误-9807:证书链无效

Arj*_*jun 7 javascript safari websocket ios

我在safari中连接到websocket时遇到跟随错误,在其余的浏览器中它工作正常

错误:

WebSocket network error: OSStatus Error -9807: Invalid certificate chain
Run Code Online (Sandbox Code Playgroud)

码:

var websocket = new WebSocket("wss://localhost:44300/websocketHome", "Room_123")
Run Code Online (Sandbox Code Playgroud)

Tho*_*bin 1

因此,在回答这个问题时我要先声明一下:我不是 WebSocket、浏览器、Safari 或 URL 方面的专家。我提到这一点的原因是我不知道为什么这个解决方案有效,也不知道为什么 Safari 会以这种方式运行。

我花了好几个小时才弄清楚为什么我的网站无法在 Safari 中运行,但可以在其他所有浏览器中运行。这让我很生气,因为我没有时间处理这些垃圾。

本质上你需要做的就是替换它:

var websocket = new WebSocket("wss://localhost:44300/websocketHome", "Room_123")
Run Code Online (Sandbox Code Playgroud)

有了这个:

var websocket = new WebSocket("ws://localhost:44300/websocketHome", "Room_123")
Run Code Online (Sandbox Code Playgroud)

但先别责怪自己,因为当它在 Chrome 和 Firefox 中运行时,你并没有想象到它。Safari 似乎是唯一强制执行 URL 协议部分的浏览器,即本地主机连接使用“ws”而不是“wss”。

基本上我没有时间研究 Safari 是否正确遵循了标准,但这并不重要,因为我将把这作为 Safari(2017 年的 Internet Explorer)不必要地破坏的另一个例子从人群中脱颖而出,让网络开发人员的日子变得不好过。

如果Apple想要执行其他浏览器不执行的标准,欢迎他们这样做,但他们至少需要打印有用的错误,WebSocket网络错误:OSStatus错误-9807:无效的证书链不够好。

编辑

这对于大多数人来说是显而易见的,但对于那些不是专业开发人员的人来说,请确保不要将此更改部署到生产中。您希望使用 wss 协议进行生产,如果您的证书设置正确,那么在 Safari 上应该可以正常工作。