我使用RESTFul服务作为我的前端的后端.该服务在其响应上设置expires/etag/lastmodified标头.
我正在寻找的是一个客户端(有利的java)库,它可以从服务中获取数据并将其缓存在可插入的缓存后端,如ehcache.
我还希望能够做的是在条目无效时使用后台工作线程自动填充缓存.此外,做条件GET应该是明智的.
我遇到过 http://hc.apache.org/httpcomponents-client-ga/tutorial/html/caching.html
有没有人知道的其他图书馆?这不是一个相当普遍的问题吗?
我们目前正在将我们的服务器迁移到一个新的服务器,其中 PLESK 12.5 不支持我们的 PHP 应用程序的 Varnish 缓存。
我们使用 Varnish,主要是为了 'stale-while-revalidate' 功能,这样我们就可以发送整个页面或部分(使用 ESI),而无需等待任何客户在缓存刷新时等待。
对于类似的缓存,有没有 Varnish 的替代品?可以在 PLESK 或任何 PHP/服务器缓存上运行的另一个“程序”?
PLESK 带有 NGINX,但它似乎没有提供 'stale-while-revalidate' 功能;我也知道 PLESK 不支持 Squid。
假设我有一个运行 firebase firestore 数据库的网络/移动应用程序。
我的应用程序设置为主要提供完全存储在 firestore 中的动态内容。
所以我们在谈论缓存动态内容
如果用户加载页面 A,它将向 firestore 发出 1 个请求(例如)。如果此用户转到页面 B,然后在 5 分钟后返回页面 A,如果内容没有更改,我不希望应用程序再次发出请求。
我听说过http cache-control标题,但我担心的是。如果缓存控件去检查 firestore 以了解内容是否仍然相同,此操作是否会被视为 firestore 的请求?
etag->value.len = ngx_sprintf(etag->value.data, "\"%xT-%xO\"",
r->headers_out.last_modified_time,
r->headers_out.content_length_n)
- etag->value.data;
r->headers_out.etag = etag;
Run Code Online (Sandbox Code Playgroud)
如果服务器中的文件last-modified-time发生了变化,但文件内容没有更新,那么etag值会一样吗?
为什么不是内容哈希etag生成的值?
有一些负载较重的 api 资源,其中响应是动态的,为了减轻源服务器的负载,我们使用 Varnish 作为前面的缓存层。API 使用范围从 max-age=5 到 max-age=15 的缓存控制标头进行响应。由于我们使用低缓存 ttl,因此许多请求仍然会在后端获取中结束。从这个意义上说,我们不确定我们是否正确理解清漆请求在恩典方面的合并。我们没有触及任何宽限设置,使用 VCL 的宽限和从后端发送 stale-while-revalidate 标头。
\n所以问题是;当某个资源从缓存中过期后,对该资源的所有请求都将在 varnish 中等待,直到该资源再次在缓存中刷新,以防止雷群问题?或者默认宽限设置是否会阻止 \xe2\x80\x9cwaiting\xe2\x80\x9d 请求,因为在后端获取完成时将提供 \xe2\x80\x9cstale\xe2\x80\x9d 内容?从文档中我们不清楚默认值是如何工作的。
\n我有一个网站,当我用谷歌插件检查页面速度时,我收到:
利用浏览器缓存
以下资源缺少缓存过期
搜索仅返回在Apache下使用htaccess的信息,但我的站点在Windows 2003 Server上以纯HTML语言运行,我甚至无法访问服务器.
是否有任何方法来指定expiration和gzip压缩,因为它建议?
我使用POCO C++ Net库作为http
我想尝试为持久缓存制定策略.
首先,我想我需要从缓存标题中过期并使用缓存值进行交叉检查(请告诉我,如果我错了).
那么如何从中提取缓存头httpResponse?
我已经看到你可以用Java(getFirstHeader())执行此操作,但是如何在POCO C++中执行此操作?
以下是使用POCO的普通http GET请求:
try
{
// prepare session
URI uri("http://www.google.se");
HTTPClientSession session(uri.getHost(), uri.getPort());
// prepare path
string path(uri.getPathAndQuery());
if (path.empty()) path = "/";
// send request
printnet(path.c_str());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.sendRequest(req);
// get response
printnet("Get response");
HTTPResponse res;
cout << res.getStatus() << " " << res.getReason() << endl;
// print response
istream &is = session.receiveResponse(res);
StreamCopier::copyStream(is, cout);
}
catch (Exception &ex)
{
printnet(ex.displayText().c_str());
return -1;
}
return 0;
Run Code Online (Sandbox Code Playgroud) 我正在开发一个管理大量图像,存储和调整大小的Web应用程序.
图像的请求类似于:domain:port/image_id/size
服务器获取image_id,如果还没有这样大小的图像,则创建它并将其存储在文件系统上.
所以一切正常,服务器正在运行,但我需要在浏览器中缓存这些图像至少一天,以减少服务器带宽消耗.
我做了几次测试,但似乎没有任何效果.
这是我用来制作响应头的代码:
response.writeHead(304, {
"Pragma": "public",
"Cache-Control": "max-age=86400",
"Expires": new Date(Date.now() + 86400000).toUTCString(),
"Content-Type": contentType});
response.write(data);
response.end();
Run Code Online (Sandbox Code Playgroud)
我也尝试了响应状态200. contentType总是像mime类型,如"image/jpg"或"image/png"数据是图像的字节缓冲区.
有什么建议?非常感谢.
健康长寿·繁荣昌盛,
d.
我使用Chrome的审核功能试图在我的网站上找到一些性能瓶颈.我发现了很多关于不可缓存资源的报告.
我用一个包含库中样式表的单页进行了干运行,发现了同样的事情:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html" >
<h:head>
<h:outputStylesheet library="default" name="style.css"/>
</h:head>
<h:body>
<div><h:outputText value="test"/></div>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是审计日志条目:
The following resources are explicitly non-cacheable. Consider making them cacheable if possible:
style.css.jsf
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我从库中删除它,这条消息就会消失.因此,看起来在库中缓存资源存在问题.
有没有办法来解决这个问题?
编辑:根据本回答中的一条评论,如果在页面上执行正常刷新,可能不会缓存CSS: 正确设置HTTP标头以强制缓存JS,CSS和PNG文件
那可能是对的吗?为什么书签或键入的URL不能重新使用缓存副本?
我使用express设置了一个简单的静态服务器.
var location = path.join(__dirname, 'public');
app.use(express.static(location, { cacheControl: true, setHeaders: function(res, path) {
res.setHeader("Cache-Control","max-age=0,must-revalidate");
} }));
Run Code Online (Sandbox Code Playgroud)
请求头与发送If-None-Match,并If-Modififed-Since和我还可以看到304 Not Modified在Chrome中回应,如果我重新加载页面,而无需修改文件.200 OK如果我修改其中一个文件,我会得到一个.
但为什么我的Chrome网络标签显示下载文件的大小而不是说(from memory cache)状态代码是304 Not Modified什么时候?
我期待文件从缓存中加载,如果它没有被修改并且如果被修改则从服务器提供.
感谢任何帮助和指导.