对于主要端点需要授权的端点,我使用 varnish 和 Edge-side 包含,但 ESI 通常不会......但有时它们会这样做。当我希望所有 ESI 请求保留授权标头时,我现在通过添加一个我调用Keep-Authorization
到主请求的标头来处理它。然后我有
vcl_recv {
...
if (req.esi_level > 0 && !req.http.Keep-Authorization) {
unset req.http.authorization;
...
}
}
这工作正常,但很不优雅——它要求请求者知道是否添加该 Keep-Authorization 标头。虽然 API 目前仅供我们使用,但可能会发生变化。
事实上,0 级响应知道它的 ESI 孩子是否需要授权,并且应该能够设置一个标头来表明这一点。如果我可以在清漆生命周期的适当部分阅读它,我可以在 ESI 基于我从 0 级响应得到的内容解决之前适当地删除(或不)授权标头。
这似乎是我必须做的事情vcl_backend_response
,但我不太确定。或者,如果vcl_recv
有类似req_top
顶级响应的东西(在解决 ESI 时应该可用),也可以解决问题。
简而言之,我希望源能够确定是否保留授权标头以在其响应中解析 ESI。这是可行的吗?