gpt4 book ai didi

web-services - 具有授权 header 的 Varnish 缓存内容的最佳实践

转载 作者:行者123 更新时间:2023-12-03 17:44:59 25 4
gpt4 key购买 nike

我在我的应用程序中实现了一个类似 facebook 的消息系统,现在我尝试使用 Varnish 来提高性能。(即缓存用户消息对话)。必须保护用户对话,以便只有经过身份验证的用户才能查看。

我使用 oauth2 来授权/验证用户,所以检索用户消息的请求是这样的。

curl -X GET user/{id}/message/thread/{thread} -H 'Authorization: Bearer XXX'

据我对 Varnish 缓存的了解,如果请求具有授权或 Cookie header ,则 Varnish 的默认设置不会缓存内容,我可以在 Varnish 设置中 strip header 信息,但如果我这样做,我失去了控制后端识别用户是否是经过身份验证的用户。

所以我的问题是:在这种情况下使用 Varnish 缓存的最佳做法是什么?

目前,我有一个解决方法,而不是在 header 中发送授权,我将其附加为查询字符串,所以它会像

curl -X GET user/{id}/message/thread/{thread}?access_token=XXX

它有效,但我觉得这不是一个正确的方法,有什么想法吗?

谢谢!

最佳答案

很简单,如果内容因为 http header 而改变,那么您需要返回一个 Vary header 来指定它。

让 Varnish 缓存带有授权 header 的内容很容易。您只需定义自己的 vcl_recv 方法并删除这部分:


如果(req.http.Authorization){
返回(通过);
}

这会让 Varnish 缓存它。这是第一部分。第二部分是不为一个用户缓存内容并将其提供给另一个用户。为此,最好的方法是让您的后端使用列表中包含 Authorization 的 HTTP Vary header 进行响应。这告诉 Varnish 内容根据该 header 而变化。该请求 header 的更改意味着不同的内容。

授权 header 对于不同的用户会有所不同,因此您将获得相同 url 的许多对象。但这就是您想要的。

关于web-services - 具有授权 header 的 Varnish 缓存内容的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com