为什么浏览器不支持调用系统的 Socket ? 而提供了更高层的协议 websocket?

2019-11-01 15:38:30 +08:00
 HarryQu
是因为 CROS 吗 ?
2793 次点击
所在节点    问与答
12 条回复
Latin
2019-11-01 15:58:21 +08:00
codehz
2019-11-01 17:45:49 +08:00
当然是为了安全啊)
你直接用 native socket 的话,怎么做鉴权,如何防止一键扫描内网呢)
HarryQu
2019-11-01 17:54:10 +08:00
@Latin 嗯,我之前看到了这篇文章,它没说为什么浏览器不支持调用 socket。
HarryQu
2019-11-01 17:56:08 +08:00
@codehz 有道理...
Nitroethane
2019-11-01 17:58:52 +08:00
浏览器引入沙盒的原因就是为了各种限制网页端的能力,如果网页支持调用 socket 系统调用,那跟万恶的 activex 有啥区别
Nitroethane
2019-11-01 18:00:18 +08:00
表述可能稍微有点问题,不是很清楚 activex 能不能用 socket 系统调用,不过大致意思就是这样
singerll
2019-11-01 18:02:28 +08:00
因为 浏览器是基于 HTTP 的标准客户端
sujin190
2019-11-01 18:05:20 +08:00
有了 socket 还有啥不能干的,想想看某天百度哪个产品经理脑洞大开,百度一下,来个悄悄拍的私照啊什么的直接帮你发布在微博,嗯,你就上热搜了,是不是太过刺激了一点
learnshare
2019-11-01 18:06:56 +08:00
浏览器是一个沙盒执行环境,目的就是为了隔离系统环境,提供统一的运行环境
codehz
2019-11-01 18:07:58 +08:00
passerbytiny
2019-11-01 18:13:14 +08:00
你首先要分清楚:Network Socket 跟 Internet Socket 是相似的两码事; Socket 是数据通信机制或通信协议而不是系统 API ;串口上的 Socket、TCP 上的 Socket、WebSocket ( Http 上的 Socket ),其核心都是 Socket。

然后,浏览器不能通过操作系统的 API 发起直接基于 TCP 的 Socket,是各大浏览器厂商遵循 W3C、ECMA 规范的结果。如果浏览器厂商不想遵循规范,它完全可以编制一套 API 让网页直接发起基于 TCP 的 Socket 连接。W3C、ECMA 规范只允许 WebSocket 而不允许 TCP Socket,原因就多了去了,不光是安全,让前端更容易开发也是一个重要的原因。
HarryQu
2019-11-01 18:26:06 +08:00
@passerbytiny 我之前对 Socket 的理解是 : Socket 是系统对 TCP/UDP 的一层抽象。

为什么不能理解为系统对上层应用提供的 API 呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/615283

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX