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)
因此,在回答这个问题时我要先声明一下:我不是 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 上应该可以正常工作。
| 归档时间: |
|
| 查看次数: |
4443 次 |
| 最近记录: |