标签: http-caching

如何像浏览器一样实现客户端http缓存?

我使用RESTFul服务作为我的前端的后端.该服务在其响应上设置expires/etag/lastmodified标头.

我正在寻找的是一个客户端(有利的java)库,它可以从服务中获取数据并将其缓存在可插入的缓存后端,如ehcache.

我还希望能够做的是在条目无效时使用后台工作线程自动填充缓存.此外,做条件GET应该是明智的.

我遇到过 http://hc.apache.org/httpcomponents-client-ga/tutorial/html/caching.html

有没有人知道的其他图书馆?这不是一个相当普遍的问题吗?

http restlet http-caching resteasy

4
推荐指数
1
解决办法
4184
查看次数

来自 Varnish 的 Stale-while-revalidate 缓存替换

我们目前正在将我们的服务器迁移到一个新的服务器,其中 PLESK 12.5 不支持我们的 PHP 应用程序的 Varnish 缓存。

我们使用 Varnish,主要是为了 'stale-while-revalidate' 功能,这样我们就可以发送整个页面或部分(使用 ESI),而无需等待任何客户在缓存刷新时等待。

对于类似的缓存,有没有 Varnish 的替代品?可以在 PLESK 或任何 PHP/服务器缓存上运行的另一个“程序”?

PLESK 带有 NGINX,但它似乎没有提供 'stale-while-revalidate' 功能;我也知道 PLESK 不支持 Squid。

nginx plesk varnish http-caching

4
推荐指数
1
解决办法
2610
查看次数

如何使用 Http 缓存控制保存 Firestore 请求?

假设我有一个运行 firebase firestore 数据库的网络/移动应用程序。

我的应用程序设置为主要提供完全存储在 firestore 中的动态内容

所以我们在谈论缓存动态内容

如果用户加载页面 A,它将向 firestore 发出 1 个请求(例如)。如果此用户转到页面 B,然后在 5 分钟后返回页面 A,如果内容没有更改,我不希望应用程序再次发出请求。

我听说过http cache-control标题,但我担心的是。如果缓存控件去检查 firestore 以了解内容是否仍然相同,此操作是否会被视为 firestore 的请求?

caching http-caching firebase google-cloud-firestore

4
推荐指数
1
解决办法
1437
查看次数

为什么 Nginx etag 是根据上次修改时间和内容长度创建的?

Nginx etag源

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生成的值?

etag nginx http-caching

4
推荐指数
1
解决办法
3039
查看次数

Varnish 默认宽限行为

有一些负载较重的 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

caching varnish http-caching varnish-vcl

4
推荐指数
1
解决办法
1521
查看次数

利用浏览器缓存

我有一个网站,当我用谷歌插件检查页面速度时,我收到:

利用浏览器缓存
以下资源缺少缓存过期

搜索仅返回在Apache下使用htaccess的信息,但我的站点在Windows 2003 Server上以纯HTML语言运行,我甚至无法访问服务器.

是否有任何方法来指定expiration和gzip压缩,因为它建议?

html iis configuration http-caching windows-server-2003

3
推荐指数
1
解决办法
1万
查看次数

Poco c ++ Net:Http从响应中获取头文件

我使用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)

c++ http http-caching poco-libraries

3
推荐指数
2
解决办法
4196
查看次数

node.js:具有正确标头的浏览器图像缓存

我正在开发一个管理大量图像,存储和调整大小的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.

response http-caching image-caching offline-caching node.js

3
推荐指数
1
解决办法
6909
查看次数

Google Chrome Audit在库中的JSF资源上说"以下资源显式不可缓存"

我使用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不能重新使用缓存副本?

css jsf http-caching google-chrome-devtools

3
推荐指数
1
解决办法
2708
查看次数

使用max-age = 0表示静态服务器缓存控制,必须重新验证

我使用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什么时候?

我期待文件从缓存中加载,如果它没有被修改并且如果被修改则从服务器提供.

感谢任何帮助和指导.

http-caching node.js express

3
推荐指数
2
解决办法
8177
查看次数