我无法理解禁止在 Varnish 中是如何工作的。从清除和禁止之间的区别的术语和思想来看,似乎
请说清楚。
此外,禁止算法被定义为
缓存中的每个对象始终指向禁止列表中的一个条目。这是他们最后一次检查的条目。每当 Varnish 从缓存中检索某些内容时,它都会检查指向禁止列表的对象指针是否指向列表的顶部。如果它没有指向列表的顶部,它将针对禁止列表上的所有新条目测试该对象,如果该对象不匹配其中任何一个,则更新禁止列表的指针。
如果有人得到这个..请解释。这将非常有帮助。
我有大型静态文件,应该使用 HTTP 缓存的哈希值来破坏这些文件。如果我将它们放入public目录中,vite 只会复制它们,而不在文件名中附加哈希值。如果我将它们放入assets目录中,vite 会忽略它们,因为它们不是直接从代码引用,而是通过 XHR 请求加载。\n目录结构非常标准:
/\n\xe2\x94\x9c\xe2\x94\x80 src/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 assets/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 locales/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 en.json\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 de.json\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 ru.json\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 main.js\n\xe2\x94\x9c\xe2\x94\x80 public/\n\xe2\x94\x9c\xe2\x94\x80 dist/\n\xe2\x94\x9c\xe2\x94\x80 index.html\nRun Code Online (Sandbox Code Playgroud)\n我如何告诉 vite 复制那些在文件名中添加了哈希值的文件,以及如何获取生成的文件名以在 XHR 请求中使用它们?
\n客户端会报告我们的JS重型应用程序中的错误,我们修复了它,但客户端的浏览器仍在使用缓存副本.这种情况发生了很多,并要求我们的客户刷新他们的浏览器缓存似乎非常低技术和麻烦.
我们知道?ver=xxx解决方法,但我们使用RequireJS,因此应用此类黑客并不容易.
HTTP缓存控制是否有效?但是,我们注意到IIS没有立即获取JS文件更改,并且HTTP标头(上次修改)未反映最新更改.
ETag会更好吗?在IIS上最后修改它是好还是坏?
还有其他方法吗?谢谢
我正在使用 okhttp 和 Retrofit 来调用 REST 服务。从该服务返回的数据存储在我的 Android 应用程序中的 sqlite 数据库中。
每当我调用 REST api 时,如果数据没有更改(由 ETag 或 Last-Modified 标头确定),我希望 Retrofit 回调不执行任何操作(数据库中的数据没问题)。否则,我想从 REST 服务下载更新的 JSON 并更新数据库(通过回调的 onSuccess 方法)。
关于缓存响应的所有设置磁盘缓存的 okhttp 示例,我只需要缓存/存储每个请求的 Etag/上次修改时间(而不是整个响应)。
我应该通过传递给 okhttp 的自定义缓存实现来执行此操作,还是应该与 okhttp 或 Retrofit 一起使用更好的接口?
一旦我完成了实现设置,我是否只需要在 onFailure 回调中处理304“错误”而不执行任何操作?
在Spring Boot MVC应用程序中,我以这种方式禁用 HTTP 缓存:
WebContentInterceptor cacheInterceptor = new WebContentInterceptor();
cacheInterceptor.setCacheSeconds(0);
cacheInterceptor.setUseExpiresHeader(true);
cacheInterceptor.setUseCacheControlHeader(true);
cacheInterceptor.setUseCacheControlNoStore(true);
registry.addInterceptor(cacheInterceptor);
Run Code Online (Sandbox Code Playgroud)
如何在Spring Boot WebFlux应用程序中做到这一点?
我在切片服务器前面使用清漆来缓存 Mapbox 切片。为了删除旧的图块,我打算使用禁令来有效地删除大量缓存的图块。我的问题是清漆仍然使用缓存的对象(至少age响应中表明了这一点)并且不联系后端。
curl -X BAN -H 'X-Purge-Regex: 5/3/4.pbf' varnish我首先请求 http://varnish/5/3/4.pbf,然后使用或 或者添加禁令varnishadm,然后ban obj.http.url ~ 5/3/4.pbf再次请求 http://varnish/5/3/4.pbf。
一开始我的禁令列表是空的:
Present bans:
1610117471.434488 1 C
Run Code Online (Sandbox Code Playgroud)
禁令已成功添加curl -X BAN -H 'X-Purge-Regex: 5/3/4.pbf' varnish
<!DOCTYPE html>
<html>
<head>
<title>200 Ban added</title>
</head>
<body>
<h1>Error 200 Ban added</h1>
<p>Ban added</p>
<h3>Guru Meditation:</h3>
<p>XID: 8</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
并显示在禁止列表中
Present bans:
1610117369.028870 0 - obj.http.url ~ 5/3/4.pbf
1610117307.220739 1 C
Run Code Online (Sandbox Code Playgroud)
再次请求http://varnish/5/3/4.pbf后,ban列表显示使用了该ban
Present bans:
1610117471.434488 1 - …Run Code Online (Sandbox Code Playgroud) 即使我使用session.invalidate方法,我的网页也会被缓存.如何使用java编码删除页面缓存?
我打算在我的下一个项目中使用Laravel框架.到目前为止,我仍然陷入组织项目中静态内容的链接(图像,脚本等).例如,我有这个缓存选项(缓存所有静态文件,nginx):
location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
expires max;
}
Run Code Online (Sandbox Code Playgroud)
如何建立文件main.js的链接?如果文件被修改,如何告诉代理文件已过期?
在我目前的项目中,我有版本控制系统,它使用文件修改时间为文件生成唯一的前缀.所以链接就像http://site.com/22566223435/js/main.js下次当文件更改链接自动更改时.
Laravel实现此功能的最佳做法是什么?谢谢!
我的网站使用cloudfront作为其图像.如果我在浏览器中加载网页,然后使用curl在该页面上请求图像,则curl请求是缓存未命中.使用curl的后续请求是缓存命中.
示例:运行两次:
curl --verbose https://d1hvwudqvjuczb.cloudfront.net/assets/landing/splash_dickenko-2199af423f275d0784c1813cbaab5645.jpg`
Run Code Online (Sandbox Code Playgroud)
第一次,X-Cache将是"来自云端的小姐",第二次将是"来自云端".
因此,似乎cloudfront正在使用请求的某些方面来决定是否应该重新获取图像.
这个标准是什么?
我在 SPA Web 应用程序和 REST API 后端遇到浏览器缓存问题。我可以在打开开发人员工具的情况下在 Firefox 和 Safari 上重现它:我确保缓存未禁用。
当我进入第一个特定页面,该页面只是从 REST API 获取并显示对象时,我使用“硬刷新”(Mac 上的 CMD+R)来完成此操作。我看到以下标题:
第一个请求:
Host: localhost:5000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: application/json, text/plain, */*
Accept-Language: en,it;q=0.7,fr;q=0.3
Accept-Encoding: gzip, deflate, br
Origin: http://localhost:3000
DNT: 1
Connection: keep-alive
Referer: http://localhost:3000/literature/sde5e-zeb98
Cookie: ...
If-Modified-Since: Fri, 10 Jul 2020 16:19:24 GMT
If-None-Match: "2"
Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)
(注意Cache-Control标题,由于硬刷新而自动添加)
回复:
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 6128
ETag: "2"
Last-Modified: Fri, 10 Jul 2020 …Run Code Online (Sandbox Code Playgroud) http-caching ×10
varnish ×2
varnish-vcl ×2
caching ×1
coldfusion ×1
curl ×1
esbuild ×1
etag ×1
http-headers ×1
iis ×1
java ×1
javascript ×1
laravel ×1
mapbox-gl-js ×1
okhttp ×1
php ×1
postgis ×1
requirejs ×1
retrofit ×1
spring-boot ×1
vite ×1
vue.js ×1
webpack ×1