当请求中存在授权标头时,它总是一个缓存未命中
Posted
技术标签:
【中文标题】当请求中存在授权标头时,它总是一个缓存未命中【英文标题】:When Authorization header is present in the request, its' always a Cache Miss 【发布时间】:2018-03-23 20:39:54 【问题描述】:当入站请求中存在授权标头时,它始终是缓存未命中。我的要求是,我需要 ATS 将 Authorization
标头像任何其他标头一样处理(它不应该导致缓存未命中,它应该被转发到上游服务)。我怎样才能做到这一点。
这听起来可能不安全,但是,我有一个特定的用例。此缓存供内部使用,它的访问由其他方式控制。
我试过了
根据official documentation
默认情况下,Traffic Server 不会缓存以下对象 请求标头:
授权
缓存控制:无存储
缓存控制:无缓存
配置 Traffic Server 忽略这个请求头,
在 records.config 中编辑 proxy.config.http.cache.ignore_client_no_cache。
CONFIG proxy.config.http.cache.ignore_client_no_cache INT 1 运行 命令 traffic_ctl config reload 以应用配置更改。
但是,没有运气
【问题讨论】:
【参考方案1】:如果您的源返回带有“public”指令(例如,“Cache-Control: max-age=60,public”)或包含 s-maxage 指令(例如,“Cache-控制:s-maxage=60"),ATS 应该开始缓存对象。相关的 http RFC: https://www.rfc-editor.org/rfc/rfc2616#section-14.8
When a shared cache (see section 13.7) receives a request
containing an Authorization field, it MUST NOT return the
corresponding response as a reply to any other request, unless one
of the following specific exceptions holds:
1. If the response includes the "s-maxage" cache-control
directive, the cache MAY use that response
... 3. 如果响应包含“public”缓存控制指令, 它可能会被退回以响应任何后续请求。
同样,您也可以使用 header_rewrite 插件从请求中删除 Authorization 标头,或者添加 public/s-maxage。
【讨论】:
【参考方案2】:实际上这个https://docs.trafficserver.apache.org/en/latest/admin-guide/configuration/cache-basics.en.html#configuring-traffic-server-to-ignore-www-authenticate-headers 对我有用。
以下说明也适用于Authorization
标头,除了WWW-Authenticate
标头。他们需要更新文档。
配置 Traffic Server 忽略 WWW-Authenticate Headers
默认情况下,Traffic Server 不缓存包含 WWW-Authenticate 响应头的对象。 WWW-Authenticate 标头包含客户端在准备对源服务器的身份验证质询响应时使用的身份验证参数。
当您将 Traffic Server 配置为忽略源服务器 WWW-Authenticate
标头时,所有带有 WWW-Authenticate
标头的对象都将存储在缓存中以供将来请求使用。但是,在大多数情况下,不缓存具有 WWW-Authenticate
标头的对象的默认行为是合适的。如果您了解 HTTP 1.1,请仅将 Traffic Server 配置为忽略服务器 WWW-Authenticate
标头。
配置 Traffic Server 忽略服务器 WWW-Authenticate
标头:
在records.config
中编辑proxy.config.http.cache.ignore_authentication
。
CONFIG proxy.config.http.cache.ignore_authentication INT 1
运行命令traffic_ctl config reload
以应用配置更改。
【讨论】:
以上是关于当请求中存在授权标头时,它总是一个缓存未命中的主要内容,如果未能解决你的问题,请参考以下文章
从使用 Angular 7 的请求中接收 Spring Boot 中的空授权标头,但 Postman 工作正常
每当我发送包含 Bearer 令牌的请求时,ASP.Net Core API 总是返回 401 未授权
通过 PHP 缓存图像请求 - If-Modified-Since 未发送
当 axios 在 React 中请求时,Ruby on Rails 的标头中不包含授权令牌,但它可以与 Postman 一起使用