-
后端代理以及 cfworker 接口调整,修复缓存失效的问题
-
前端增加缓存记录,提高浏览器缓存命中率
-
前端增加 Cookie 持久化
-
前端增加 CORS 站点直连功能
-
配置调整,支持线路权重
-
更详细的服务器错误信息显示
-
增加更多的 Storage API Hook
之前代理接口使用固定的路径 /http
,目标 URL 设置在请求头 --url
字段,同时返回头配置了 vary: --url
字段,希望能根据不同的 --url
请求返回不同的缓存内容。但事实上该方案并未生效,和预想的不同,浪费了不少流量。(对 vary
了解不够透彻~)
为修复这个问题,目前将代理接口改成 /http/目标 URL
,去掉了 vary
字段。同时将绝大部分的请求字段打包到 Referer
字段里,使请求头保持简单,不产生 CORS preflight。
如果不打包,则会频繁出现 preflight,即使配置了
Access-Control-Max-Age
也没用,因为 max-age 只对特定 URL 记忆,而现在的 URL 几乎每次都不同,所以必须保持请求头足够简单。至于为什么选择Referer
字段,因为只有这个字段可以灵活存储数据,其他几个字段都有些限制,容易出现 preflight。
当然这个功能目前仍在研究中,未来也许会有更好的方案。
由于切换 节点/线路 会使得最终的 URL 发生变化,从而导致无法利用已有的缓存。
目前增加了静态资源记忆功能,记住当前使用的域名。下次加载时直接使用上次的域名,从而命中浏览器缓存。
存储查看:indexedDB
-> .sys
-> url-cache
目前 Cookie 信息定期同步到本地存储,浏览器重启后可保持之前的会话。
存储查看:indexedDB
-> .sys
-> cookie
不少网站(通常是 CDN)在返回头中配置了 access-control-allow-origin: *
,并且不校验 origin
和 referer
(或者允许为空)。
对于这样的站点,前端可直接连接而无需通过代理,从而能加快访问速度,并且节省代理服务器流量。
目前收集了部分站点,只在纯前端实现。未来将尝试和服务端配合,覆盖所有这样的场合。
不同于之前均匀分配负载,目前可配置每个线路的权重,从而能对部分线路增加或降低负载。
例如演示案例中的 cfworker 节点,使用 1 个收费版 + 多个免费版的方案。由于免费版有访问频率限制,因此使用更低的权重以减少负载。(命中比例 = 当前值 / 总值)
目前可显示代理服务器的 DNS 解析错误、HTTP 连接错误、白名单错误等,取代之前过于简陋的报错信息。
增加 indexedDB
和 Cache Storage
的 key 枚举、删除的 API Hook。