你想写 native 抓各种 api ,那是因为 native 你可以任意构造请求数据,所以没有同源安全这个限制。但是浏览器不可能放开这个限制,因为浏览器托管了 cookie 这类的敏感数据是可以做用户标识的,所以发出去的请求格式有限制,不能任意构造请求。
即便是 native 的开发,也还有存储域的限制,一个 app 如果在框架指定的私有存储域写入文件,那么别的 app 也不可以访问到这个私有存储域的文件。而且最重要的一点, native 不可以调用用户浏览器数据或者其它 app 的资源,只能靠 native 自己构造请求数据。
而浏览器对于 web 请求,是不验证发起域的,只要发出去的请求,默认就带上该域的 cookie 作为用户标识。所以 web 目前的请求方式决定了,限制跨域是保证浏览器用户数据安全的底线,不管任何浏览器都必须支持同源安全限制。只有符合 cors 白名单的网站才可以发跨域请求。
如果浏览器在目前的业务下可以在任意界面构造任何请求发出去,这个浏览器不可能有人会使用。如果所有浏览器都没有同源安全限制,那互联网不超过一周就崩盘了,你随便访问一个不知名的网站,它就在后台给一票网银系统构造转账请求,在你不知情的情况下,钱就消失了。对网站来说,自己站点提供的服务,图片、 api 这类的,别的网站可以不告而取,任意调用。
你想这么做,我猜测的原因可能是,你希望在自己的网页调用别人的资源,并且是别的网站没有在 cors 开放权限的资源。这种情况下你依然想调用这个资源,那就只剩你想盗用别人的资源这个情况了。
碰到这种不能调用的资源,要么你找对方网站在 cors 上面加上你的网站域名,允许你直接调用。要么你自己开服务器做反代,转成同域请求。
以后浏览器如果可以任意构造请求,那就要改变浏览器的请求模式,对于非同源的域发起的请求,比如
A.com 网页中构造了一个向
B.com 的请求,那这个请求拿不到任何
B.com 存储在浏览器的数据,相当于一个独立的用户发起的请求。比如
A.com 网页向
B.com 发出的请求永远不能携带 cookie 和敏感的 header 数据。
这种情况下,才可能出现任意网页调用任意域的 api 数据。否则只会出现更多欺诈用户的现象。对行业生态和用户都是伤害。