大家了解 为什么 PWA 还有 web assembly 之类的技术,为什么不开放文件和网络权限吗?

2019-10-25 12:12:20 +08:00
 maomaomao001

PWA 真的是好东西啊,可以离线运行, 感觉明明可以给他文件,网络(可跨域不限制的)权限 (或者至少让用户选择给不给这些权限)的话,感觉会非常强大啊, 再放开 https 的限制 (比如像 chrome 插件那样可以打包本地安装使用), 完全可以当 native app 的用的呀。 比如各种小工具

还有 web assembly 也是,性能那么强大了, 结果还是没有办法 操作文件 和 发起跨域网络请求的能力,这个么多性能用来干嘛

4822 次点击
所在节点    问与答
59 条回复
maomaomao001
2019-10-25 13:50:46 +08:00
@taxiaohaohhh 我觉得 国内厂商搞的小程序侵入型太高了,直接把 web 标准扔了,自己搞一套还那么封闭,
明明给个自己的 SDK (用来实现微信一键登录,用户基本信息之类的)明明就可以的
Mutoo
2019-10-25 14:20:44 +08:00
开放的安全必须折中考虑,早期与 Web 相近的 Flash 有更开放的 API , 但即使如此,如果你要联网访问 flash player 就不允许你读本地文件。如果你要读本地文件,它就不允许联网访问。为什么要这样设计?因为怕恶意程序在你不知情的情况下随便将你的文件发到网络上去。毕竟 flash 可以在互联网上随意发布,没有一个第三方机构来审核它。

此外跨域访问一样是安全性考虑,防止了未授权访问的可能。减少的跨站请求伪造的危害。
luob
2019-10-25 14:25:59 +08:00
google:别催了别催了别催了别催了在做了在做了在做了在做了
maomaomao001
2019-10-25 14:38:01 +08:00
@Mutoo 我现在遇到的场景就很奇怪
功能很简单: 程序访问 A 接口 POST (有跨域限制),然后拿到的数据存成文件保存。

可是这个用原生开发,发网络请求没有限制 ( post 随便发,app 不会拦截去拦截), 文件随便写 (当然用户得授权)

所以我是真的没看懂他们这么限制住的意义
maomaomao001
2019-10-25 14:39:45 +08:00
而且,我记得以前 Android 写个 hello word 才 4,5kb 的,现在好像 hello word 都快 1mb 的样子,不知道中间发生了什么
jin5354
2019-10-25 15:54:12 +08:00
路要一步一步走,PWA 正在推进更多的 API,详见 Project fugu
https://qcon.infoq.cn/2019/shanghai/presentation/2079
包括本地文件访问,NFC 访问,通讯录访问等等逐渐落地中,据说本地文件访问 chrome M78 开始测试,就在 10 月发布
ClericPy
2019-10-25 15:59:13 +08:00
@maomaomao001
反正从本世纪初到现在, 腾讯的文化一直透漏着一种商人的精明, 恨不得把所有东西都捞到自己怀里来, 藏着掖着不给别人用; Google 的态度反而是有什么好东西, 就做到精而美, 然后开放出去, 恨不得所有人都在用它的东西. 二者目的性明确, 感觉不太适合拿来比
微信和 QQ 用户量那么大, 并不是做的太好, 而是早期流量绑架了, 现在那么多教张小龙做产品的, 张小龙又不是真傻, 很多别人眼里的缺点, 反而是刻意为之的选择.
小程序确实解决了很大程度上原始 web app 的认证方面的短板, 而且在生活中帮助也很大, 但是它的体验实在是难受...

你标题提的, 前几年还真好奇过, 不知道为什么这么优秀的东西普及率那么低, 普及速度那么慢, 现在看来, 可能是红利不够诱人吧. 不在这个圈子逛, 对国外前沿是什么态度也不了解, 进来灌水纯粹就是觉得什么东西不是腾讯做了, Google 就值得搞...
whileFalse
2019-10-25 16:11:28 +08:00
因为 PWA 构建在 JS 上,web assembly 是 JS 的高性能版。

JS 不能干什么,PWA 和 web assembly 就不能干什么。
sujin190
2019-10-25 16:28:25 +08:00
web 是安全与便利性妥协的完美,完全读取文件权限如果只能读写自己保存的,那么现在的 localstore、db 不好用么,如果能随意读写谁还敢随意打开你的网页,网络也是相似的,直接拥有底层网络权限,你这跨域限制还有个毛用,你想象一下你打开一下百度,就给你自动发了篇微博,图片用的还是你家里 nas 保存的私房照,这样的 web 太优秀了吧,各种硬件更不用说了吧

沙箱什么的太不认真了吧,如果拥有底层完整权限就不可能有沙箱,让用户授权确认就更扯了,且不说各种手残的,还有各种伪装欺骗点击的等等等,不要把世界想的太善良,而且不能说用户点了有损失就怪用户吧,你造了个手雷给一个普通用户弄炸了怪用户手残不适合吧

web 是一个开放式去中心话的协议,小程序则完全是由微信背书保证安全完整性的,他即从小程序生态或许巨大利益,同时也是整个生态主宰者,予取予夺,但是微信也承担了对小程序安全性的责任,出了问题微信要负责
maomaomao001
2019-10-25 16:37:56 +08:00
@jin5354 这些访问他们能出个沙盒控制就非常完美了,特别是通讯录之类的隐私相关的部分
momocraft
2019-10-25 16:38:27 +08:00
flash 能做很多事,后来凉了。activex 更早就凉了。

一个无法保证安全的平台不太可能流行。消费者可能比开发者反应慢、知道得少,但不更傻。

如果你甚至不能理解 CORS 保护了什么,可能不适合认真地规划一个没有跨域的 "灵活" 平台。
maomaomao001
2019-10-25 16:42:42 +08:00
@ClericPy 我当然也不是说微信搞了小程序,为什么谷歌不搞一个, 我完全不是这个意思
我的重点在于,为什么这个技术做的这么好了(可以离线了( PWA ),性能强大了( web assembly )),为什么缺迟迟不开放网络能力和文件能力,这点让我很非常诧异,主要是不明白谷歌,微软他们为什么不考虑这么搞的原因 ?
whypool
2019-10-25 16:42:53 +08:00
PWA 没监管和审核,注定是坨屎,还不如小程序

还想开文件权限,那是不可能的,一个 js 能读写本地磁盘,那多恐怖

跨域也是不能开的,资源保护,没资源也就没互联网了
murmur
2019-10-25 16:43:59 +08:00
开放了啊,cordova 就有 file api,这些 api 都参照了 html5 的标准开发命名,只不过开了更多后门
maomaomao001
2019-10-25 16:46:06 +08:00
@sujin190 问题是 localstore, 和 db,没有办法创建目录和文件,按照一定的规则保存在本地吧,或者吧我想保存的文件 zip 压缩(明明 web assembly 那么强大了) ,缺输入输出完全不够用啊
maomaomao001
2019-10-25 16:49:17 +08:00
@whileFalse

Progressive Web App 既然 Progressive 好歹超过现有的 web 应用吧(虽然能离线已经很不错了)

webassembly 就更应该支持文件之类的 (明明可以写 c c++ rust 之类的)

我只是觉得这样很可惜啊
ClericPy
2019-10-25 16:49:23 +08:00
@maomaomao001 我也想知道啊...
现在那些快应用什么的我都不想用, Windows 上的 app store 也不想开启, 味道都变了. 这帖子这么火, 应该会有好看的答案出现
momocraft
2019-10-25 17:02:09 +08:00
wasm 有出现 fs net 等 binding 的可能 (wasi)

不过不要指望能在浏览器用,至少不要指望能无条件用
DOLLOR
2019-10-25 17:08:21 +08:00
Chrome 本身就有 FileSystem 实现,只是没有成为标准,但 Chrome 下还是能用的
https://developer.mozilla.org/en-US/docs/Web/API/FileSystem
https://developer.mozilla.org/en-US/docs/Web/API/Window/requestFileSystem

如果你用过 Mega 网盘,你应该发现了,Mega 网盘的 web 端不同其他网盘。其他网盘点击下载链接后直接由浏览器接管下载工作了。但是 Mega 网盘的 web 端不一样,它是由 web 端先下载到网页的沙箱存储里,下载过程是在网页上进行的,完成后再弹出保存对话框。
Mutoo
2019-10-25 17:16:20 +08:00
这些限制是现代浏览器提供的,由于 web 开发是一个非常复杂的环境,需要考虑到各方安全性。

就拿为什么要限制跨域访问来说,跨域这个限制本来是不在 HTTP 协议中的,早期的浏览器也没这些限制,自己写的原生 APP 就更不用说了。

但浏览器开发商为用户隐私着想,增设了这个限制,可以让用户的数据更加安全,也更多的用户愿意使用,使其在浏览器之争中获得更大的市场份额。

为什么跨域能保护用户隐私,举一个很简单的例子,如果我在 E 浏览器登录了 Facebook,在 E 浏览器请求我的私信页面,就能获得我的私信内容。如果没有跨域限制,你打开了一个第三方开发者的网站,这个网站尝试在后台偷偷加载 facebook 的私信页面,然后你的私信就被读取了。相比 Chrome,你会使用 E 这样的浏览器吗?。

解决这种跨站 请求伪造( CSRF )的方法有很多,但如果一个浏览器在客户端就能帮你设置一道防线,你是不是会更信任这个浏览器。

用原生开发之所以没限制,有一个原因是 APP 的受众比较单一,用户不会在你的原生应用里登录各种可能涉及隐私的服务,除非用户本来就授权你去获取这些数据。

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

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

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

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

© 2021 V2EX