一种通用的解决浏览器跨域请求的方法
长话短说,之前基于 notion api 做了一个 SPA,差不多就是读取 notion database 的数据做一些 notion 原生不支持的统计维度展示。本地开发的时候可以用 dev server proxy,开发到一半意识到生产环境浏览器直接调用 notion api 会有跨域问题。卡了一会,又去 MDN 复习了一下 CORS 的详细说明,回忆起一个盲点:跨域是一个浏览器的行为,数据传输都已经完成了,但是浏览器收到之后判断是跨域请求,就拒绝使用返回的数据并且告警。 看到这里就联系上了本地常用的一种绕过跨域的方式:以非安全模式启动 chrome。但是 SPA 上线后不可能用这种方式了。正好我的域名是托管在 cloudflare 上的,它家有一个叫 worker 的玩意儿,流量可以按自定义的规则走 worker 过滤一下。于是另一个思路出来了:所有到 notion 的请求走一遍 worker,worker 里面覆盖 header,浏览器再收到的时候就不会判断是跨域请求。 随后我按这个思路 google 了一下,果然有人和我想到一块去了,而且已经有人把代码开源出来了,Great!比较了几个类似的玩法,组合测试了一下,我的场景还算比较简单的,基本没啥问题,上线! 理论上这种玩法儿可以解决所有的跨域问题,cloudflare 的免费账户也可以使用 worker,只是有流量限制,我自己的 worker 只处理了到 notion 的请求,GitHub 上也有处理任意跨域请求的 worker 脚本代码
支付宝扫码打赏
微信打赏