# v0.1.0 ## 更新内容 * 后端代理以及 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` 字段,因为只有这个字段可以灵活存储数据,[其他几个字段都有些限制](https://fetch.spec.whatwg.org/#cors-unsafe-request-header-byte),容易出现 preflight。 当然这个功能目前仍在研究中,未来也许会有更好的方案。 ## 节点缓存 由于切换 节点/线路 会使得最终的 URL 发生变化,从而导致无法利用已有的缓存。 目前增加了静态资源记忆功能,记住当前使用的域名。下次加载时直接使用上次的域名,从而命中浏览器缓存。 存储查看:`indexedDB` -> `.sys` -> `url-cache` ## Cookie 持久化 目前 Cookie 信息定期同步到本地存储,浏览器重启后可保持之前的会话。 存储查看:`indexedDB` -> `.sys` -> `cookie` ## CORS 站点直连 不少网站(通常是 CDN)在返回头中配置了 `access-control-allow-origin: *`,并且不校验 `origin` 和 `referer`(或者允许为空)。 对于这样的站点,前端可直接连接而无需通过代理,从而能加快访问速度,并且节省代理服务器流量。 目前收集了部分站点,只在纯前端实现。未来将尝试和服务端配合,覆盖所有这样的场合。 ## 节点权重支持 不同于之前均匀分配负载,目前可配置每个线路的权重,从而能对部分线路增加或降低负载。 例如演示案例中的 cfworker 节点,使用 1 个收费版 + 多个免费版的方案。由于免费版有访问频率限制,因此使用更低的权重以减少负载。(命中比例 = 当前值 / 总值) ## 详细错误信息 目前可显示代理服务器的 DNS 解析错误、HTTP 连接错误、白名单错误等,取代之前过于简陋的报错信息。 ## Storage API Hook 增加 `indexedDB` 和 `Cache Storage` 的 key 枚举、删除的 API Hook。