如何将VKProxy的CORS设置和HTTP响应缓存优化为?

摘要:VKProxy 是使用c#开发的基于 Kestrel 实现 L4L7的代理(感兴趣的同学烦请点个github小赞赞呢) 目前新添加了如下功能 http响应缓存 Memory Disk Redis CORS设置 log 配置随机概率采样 A
VKProxy 是使用c#开发的基于 Kestrel 实现 L4/L7的代理(感兴趣的同学烦请点个github小赞赞呢) 目前新添加了如下功能 http响应缓存 Memory Disk Redis CORS设置 log 配置随机概率采样 A/B 测试和滚动升级 http响应缓存 响应缓存可减少客户端或代理对 Web 服务器发出的请求数。 响应缓存还减少了 Web 服务器为生成响应而执行的工作量。 响应缓存在标头中设置。 客户端和中间代理应遵循 RFC 9111:HTTP 缓存下缓存响应的标头。 目前暂时内置只内存缓存,不过可以通过扩展接口扩展 缓存条件 请求条件 默认条件 请求方法必须是 GET 或 HEAD。 不能出现 Authorization 标头。 不能存在 Cache-Control: no-cache 或 Pragma: no-cache 不能存在 Cache-Control: no-store 自定义条件 可以通过在Metadata中设置 CacheWhen 自定义条件(一旦设置,默认条件将不起作用), 格式参见 如何为HTTP配置路由复杂匹配 不过依然不能存在 Cache-Control: no-store,避免缓存错误时无法处理 响应条件 缓存协商条件 请求必须生成带有 200 (OK) 状态代码的服务器响应。 不能出现 Set-Cookie 标头。 Cache-Control 标头参数必须是有效的,并且必须将响应标记为 public 而不是 private。 不能存在 Cache-Control: no-store 不能存在 Cache-Control: no-cache Vary 标头参数必须有效且不等于 *。 Content-Length 标头值(若已设置)必须与响应正文的大小匹配。 根据 Expires 标头与 max-age 和 s-maxage 缓存指令所指定,响应不能过时。 响应缓冲必须成功。 响应的大小必须小于配置的或默认的 SizeLimit。 响应的正文大小必须小于配置的或默认的 MaximumBodySize。 响应必须可根据 RFC 9111:HTTP 缓存进行缓存。 例如,no-store 指令不能出现在请求头或响应头字段中。 有关详细信息,请参阅 RFC 9111:HTTP 缓存(第 3 节“在缓存中存储响应”)。 强制缓存 可以通过在Metadata中设置 ForceCache 为 true 忽略响应缓存条件标准,不过程序如果遵从响应缓存协商标准还是使用标准最好,以免缓存错误 强制缓存条件下,只有以下限制: 请求必须生成带有 200 (OK) 状态代码的服务器响应。 不能出现 Set-Cookie 标头。 缓存设置 大家可以在Metadata中设置缓存, 具体设置项如下 Cache 缓存方式, 内置缓存有 (还可以通过扩展接口扩展,然后大家在此设置) Memory 基于 MemoryCache 实现 Disk 缓存会实际存于磁盘物理文件 Redis 启用 Redis 情况还可以缓存导redis中 CacheWhen 设置自定义条件(一旦设置,默认条件将不起作用,不设置则使用默认条件), 格式参见 如何为HTTP配置路由复杂匹配 CacheKey 通过内置“简略版模板引擎”,大家可以灵活设置缓存key,如 "CacheKey": "{Method}_{Path}" 效果等同于 $"{RouteKey}#{Method}_{Path}", 值结果可为 Route1#GET_/FAQ 具体设置内容后文详细说明,当然如模板效果不够,大家还可以通过扩展替换引入真正更为强大的模板引擎 CacheMaximumBodySize 可以设置允许缓存Body的最大大小,超过则不会缓存,默认 64 * 1024 * 1024 ,即 64MB ForceCache 设置 ForceCache 为 true 忽略响应缓存条件标准,不过程序如果遵从响应缓存协商标准还是使用标准最好,以免缓存错误 强制缓存条件下,只有以下限制: 请求必须生成带有 200 (OK) 状态代码的服务器响应。 不能出现 Set-Cookie 标头。
阅读全文