Java 无缓存控制标头的清漆行为

Java 无缓存控制标头的清漆行为,java,caching,varnish,Java,Caching,Varnish,我正在为我的团队做准备。我想知道:如果我的应用程序当前没有发送任何缓存控制头,那么varnish缓存的行为是什么。它是否仍在缓存,或者我们需要显式地发送缓存控制标题和最大年龄值,以便varnish可以缓存它。我已经设置了varnish来缓存200404400状态码响应。谢谢。这取决于许多因素:Varnish不会缓存客户端发送Coookie头的任何请求,或者如果服务器发送带有Set Cookie头的响应。您也不能缓存POST请求,因为它们不是幂等的 也就是说,如果一个请求没有附加cookie,并且

我正在为我的团队做准备。我想知道:如果我的应用程序当前没有发送任何
缓存控制
头,那么varnish缓存的行为是什么。它是否仍在缓存,或者我们需要显式地发送
缓存控制
标题和
最大年龄
值,以便varnish可以缓存它。我已经设置了varnish来缓存200404400状态码响应。谢谢。

这取决于许多因素:Varnish不会缓存客户端发送
Coookie
头的任何请求,或者如果服务器发送带有
Set Cookie
头的响应。您也不能缓存
POST
请求,因为它们不是幂等的

也就是说,如果一个请求没有附加cookie,并且是一个
GET
请求,那么varnish默认设置为将请求缓存120秒。这是由varnish中的
默认\u ttl
设置决定的,同样只适用于varnish中可缓存的请求(即使没有设置
缓存控制
头)

从清漆文档中:

缓存控制标头可以包含多个标头。Varnish对其进行评估并查找s-maxage和max age。如果找到,它会将TTL设置为s-maxage的值。如果找不到s-maxage,它将使用max age。如果两者都不存在,它将使用Expires头来设置ttl如果这些标题都不存在,它将使用默认的TTL


您指的是默认行为吗?配置VCL时,您可以覆盖发送/接收的任何/所有标头。问题具体是关于应用程序不发送
缓存控制
标头时的行为-确实,您可以覆盖发送/接收的任何标头,但不发送或接收任何标头,尽管如此,对于某些可缓存的请求仍然有一个默认TTL。@JeffSisson你是说如果没有
缓存控制
头,后端应用程序(而不是客户端)的varnish将缓存吗?@是的,刚刚用Varnish文档中的引用更新了答案如果我在应用程序(即从后端服务)中将
缓存控制
头显式设置为
无缓存
,则Varnish不会缓存响应。对的