问题标签 [http-caching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1746 浏览

django - 如果用户登录,Django会阻止缓存视图

我的访问者从 Varnish 获得页面的缓存版本。我希望管理员用户始终查看页面的当前版本。这样,所有的变化都是直接可见的。

存在这样的东西吗?我知道@never_cache装饰器。我正在寻找类似的东西,只有当用户没有登录时。

如果它与 Django-CMS 一起使用,则可以加分!

0 投票
2 回答
2158 浏览

iphone - NSURLConnection、Basic Auth 和 Cookie 的问题

我发现我进行 REST 调用的服务器将 cookie 传递到我的 iPhone。它还使用 HTTP 基本身份验证。

我有一个应用程序,您可以在其中更改用于身份验证的帐户,但是我发现更改凭据并不重要,因为didReceiveAuthenticationChallenge从未调用过。

我研究了两个潜在的修复方法:

  • 每当更改凭据时手动删除 cookie
  • 环境[request setHTTPShouldHandleCookies:NO]

我想知道我是否正确理解了这一点。我预计这NSURLRequestReloadIgnoringCacheData会处理缓存,但似乎并非如此。

我该如何解决这个问题?

编辑:我刚刚尝试设置shouldHandleCookiesNO,但似乎 cookie 仍然传递到服务器。

0 投票
2 回答
24001 浏览

http - Expires vs max-age,如果两者都在 HTTP 响应中声明,哪一个优先?

如果一个 HTTP 响应同时返回 Expires 和 max-age 指示使用哪一个?

考虑到每个都指的是不同的时间点。

0 投票
3 回答
35617 浏览

http - Cache-control 中的 no-cache 和 no-store 有什么区别?

Cache-Control:no-store我没有发现和之间的实际区别Cache-Control:no-cache

据我所知,no-store这意味着不允许缓存设备缓存该响应。另一方面,no-cache意味着不允许缓存设备在未首先与源进行验证的情况下提供缓存响应。但是这个验证是关于什么的?有条件的得到?

如果响应有no-cache,但没有Last-ModifiedETag怎么办?

问候。

0 投票
1 回答
9127 浏览

http - Cache-Control:must-revalidate 是否有义务验证所有请求,还是只验证过时的请求?

我对这个标头感到困惑,我已经阅读Cache-Control:must-revalidate了在提供缓存项目之前验证所有请求与源的义务,但只是陈旧的?还是全部不管是陈旧的还是新鲜的?我在不同的地方读过这两本书。

有什么区别Cache-Control:no-cache?因为这些标题看起来和我一样。

更新1:我从一本书中读到了这个:

Cache-Control: must-revalidate响应标头告诉缓存绕过新鲜度计算机制并在每次访问时重新验证

@Peter O. 指出了 RFC 所说的内容。所以那本旧书是错的。

更新 2:在本教程中:http ://www.mnot.net/cache_docs/

no-cache— 强制缓存每次在释放缓存副本之前将请求提交给源服务器进行验证。这对于确保尊重身份验证(与 public 结合)或保持严格的新鲜度而不牺牲缓存的所有好处很有用。

must-revalidate— 告诉缓存它们必须遵守您提供给它们的有关表示的任何新鲜信息。HTTP 允许缓存在特殊条件下提供陈旧的表示;通过指定此标头,您是在告诉缓存您希望它严格遵守您的规则。

0 投票
2 回答
3042 浏览

asp.net - OutputCache.VaryByHeader 未在响应中生成 Vary 标头

我有这个动作方法:

生成的响应是:

为什么Vary标题显示星号而不是Accept-Charset

OutputCacheAttribute确实对响应有影响,实际上,ExpiresandCache-Control:max-age=n标头取决于Duration参数,而//Cache-Control:public取决于参数。privateno-cacheLocation

我创建了一个包装器OutputCacheAttribute来查看发生了什么:

标头未显示在中断中,因此可能OutputCacheAttribute是 configure HttpContext.Current.Response.Cache

我可以看到如何filterContext.HttpContext.Response.Cache.VaryByHeaders.UserCharSet真的,例如filterContext.HttpContext.Response.Cache.VaryByHeaders.AcceptTypes的,但Vary标题总是说*

我想知道是否唯一可能的值是列为 的属性的四个值filterContext.HttpContext.Response.Cache.VaryByHeaders,可以吗?

干杯。

0 投票
1 回答
4488 浏览

http - HTTP 标头是什么意思 Vary:*

据我所知,HTTP 标头Vary指定了一个逗号分隔的 HTTP 标头列表,在决定请求是缓存命中还是未命中时,缓存需要与 URL 一起考虑这些标头。

如果省略该标头,则意味着仅考虑 URL。

但是当标题是时会发生什么Vary:*

RFC 2616 14.4

*** 的 Vary 字段值表示未指定的参数不限于请求标头(例如,客户端的网络地址),在响应表示的选择中起作用。* 值不得由代理服务器生成;它只能由原始服务器生成。

RFC 2616 13.6

*的 Vary 标头字段值始终无法匹配,并且对该资源的后续请求只能由源服务器正确解释。

这是否意味着具有此标头的所有请求都将成为缓存未命中?

我发现如果您使用 ASP.NET 将返回该 HTTP 标头OutputCacheAttribute,并且如果您不想要标头,或者您想要指定自定义标头,则必须明确禁用该行为,所以我(想要)相信它不太可能。

哪个是实际意义Vary:*

谢谢。

0 投票
3 回答
4640 浏览

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

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

我正在寻找的是一个客户端(最好是 java)库,它可以从服务中获取数据并将其缓存在像 ehcache 这样的可插入缓存后端中。

我还希望能够在条目失效后立即使用后台工作线程自动启动缓存。此外,执行条件 GET 应该很聪明。

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

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

0 投票
2 回答
934 浏览

rest - REST 集合和单个项目的缓存注意事项

我正在开发一个新的 REST-ful API,它的主要/唯一消费者将是一个智能/非网络浏览器客户端。我有一个由后台进程维护/更新的集合资源,而不是由客户端本身。第一次迭代所需的唯一内容类型是 JSON。URI 类似于:

  • /items/- 表示项目集合的资源。
  • /items/123- 代表具有 ID 的单个项目的资源123

尽管客户端不会创建新项目或更新集合以添加/删除项目,但它更新单个项目中的一些值。我的计划是使用 HTTP PATCH 更新项目资源,使用我自己的 JSON 补丁格式。

会有很多并发客户端读取项目,并发更新不同项目,偶尔并发更新同一个项目,虽然允许一定程度的“最终一致性”,但我想将其设计为“缓存友好” “尽可能的方式。阅读 PATCH 的 RFC,我看到在成功响应 PATCH 时,如果有响应,则应该使用响应更新 Request-URI 的缓存。问题归结为:

我是否:

A) 在集合资源 JSON 表示中包含单个项目的完整表示/items/,并将 PATCH 发送到/items/URI 并以补丁格式包含要更新的项目?

优点:

  • 这允许客户端不必N为了显示资源列表而执行多次请求
  • items当客户端更新项目时,允许任何缓存失效。

缺点:

  • 这对我来说并不“干净”,因为我并没有真正更新集合,而是一个单独的项目。
  • 这会使整个集合的缓存无效,而不是更改的单个项目的缓存。

或者

B) 在资源集合的 JSON 表示中,仅包含指向所包含项目的链接,并让客户端在发现集合中有哪些项目后请求各个项目。HTTP PATCH 将被发送到单个项目 URI(例如/items/123

优点:

  • 独立缓存集合和项目资源。单个项目的 PATCH 可以正确地使该项目的缓存无效。
  • API 更清晰,因为您在要更新的特定项目上发出 HTTP PATCH。

缺点:

  • 不允许批量更新项目。这目前根本不是要求,未来我也没有预见到,只是事后看来是20-20。
  • 要求客户端发出N+1请求以显示完整的项目列表。
0 投票
0 回答
812 浏览

django - django request.POST 数据缓存

您好,有一个带有表单的模板和许多输入,这些输入通过 POST 请求将一些数据传递给视图,处理它们并将结果发送到另一个模板。在最终模板中,如果我使用浏览器后退按钮跳转到第一个视图,我可以再次看到旧数据。我刷新页面,旧数据被刷新,我插入新数据,我再次提交,但是当我看到最终视图时,一些旧数据仍然存在。即使我重新启动调试服务器,问题仍然存在。似乎有一些数据缓存问题,我只能解决刷新浏览器缓存(有时不能)。这是视图代码:http ://dpaste.com/643569/和第一个模板代码:http ://dpaste.com/640960/. stackoverflow.com 上的某个人说我是控制它的“缓存导航器”,并建议我使用自定义中间件来禁用它,所以我遵循了这个建议:

我在 my_app/util 中创建了一个文件 middleware.py,然后我将它插入到 settings.py 的中间件部分。我还在 html 头部部分添加了 pragma no cache 元标记,但这些都没有帮助。问题依然存在。

有什么建议么?