# 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。
