当前位置: 首页 > 知识库问答 >
问题:

如何理解“缓存控制机制”一节中RFC2616的“语义透明”?

荀子轩
2023-03-14
  A cache behaves in a "semantically transparent" manner, with
  respect to a particular response, when its use affects neither the
  requesting client nor the origin server, except to improve
  performance. When a cache is semantically transparent, the client
  receives exactly the same response (except for hop-by-hop headers)
  that it would have received had its request been handled directly
  by the origin server.

我混淆了“Cache-Control”标题中的冲突值。

3.我通过Apache web服务器测试了一些示例

3.1网络拓扑

<Location />
    ProxyPass http://10.8.1.24:80/
</Location>

<IfModule mod_cache.c>

        <IfModule mod_mem_cache.c>
            CacheEnable mem /
            MCacheSize 4096
            MCacheMaxObjectCount 100
            MCacheMinObjectSize 1
            MCacheMaxObjectSize 2048
        </IfModule>

        CacheDefaultExpire 86400
</IfModule>
<filesMatch "\.(html|png)">
    Header set Cache-Control "max-age=5, max-age=15"
</filesMatch>
GET /index.html HTTP/1.1
Host: haha
User-Agent: telnet


HTTP/1.1 200 OK
Date: Wed, 13 Mar 2013 03:40:25 GMT
Server: Apache/2.2.23 (Win32)
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "63e62-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Cache-Control: max-age=5, max-age=35, must-revalidate
Age: 3
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

应用值“max-age=5”。在这里,我认为“max-age=35”是适用的,因为这个值可以在缓存和服务器中存储更长时间的内容,以满足随后的请求,从而从“语义透明性”的概念中提高性能。

3.2.2最大年龄=35并且必须重新验证

GET /index.html HTTP/1.1
Host: haha
User-Agent: telnet

HTTP/1.1 200 OK
Date: Wed, 13 Mar 2013 03:41:24 GMT
Server: Apache/2.2.23 (Win32)
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "63e62-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Cache-Control: max-age=35, must-revalidate
Age: 10
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

应用值max-age=35。在这里,我认为应该应用“必须重新验证”的价值。

GET /index.html HTTP/1.1
Host: haha
User-Agent: telnet

HTTP/1.1 200 OK
Date: Wed, 13 Mar 2013 03:45:04 GMT
Server: Apache/2.2.24 (Unix)
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "63e62-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Cache-Control: max-age=35, no-store
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>
GET /index.html HTTP/1.1
Host: haha
User-Agent: telnet

HTTP/1.1 200 OK
Date: Wed, 13 Mar 2013 06:22:14 GMT
Server: Apache/2.2.24 (Unix)
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "63e62-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Cache-Control: max-age=35, no-cache
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

应用“no-cache”值。

参考资料:RFC2616 https://www.rfc-editor.org/RFC/RFC2616

共有1个答案

孟永望
2023-03-14

我将你给出的例子解释如下:

>

  • max-age=5,max-age=15:max-age=5获胜,因为它的缓存时间更短,限制更大

    max-age=5,max-age=35,must-revalidate:must-revalidatewins,因为它要求客户机始终重新验证请求。第14.9.4节规定:

      The must-revalidate directive is necessary to support reliable
      operation for certain protocol features. In all circumstances an
      HTTP/1.1 cache MUST obey the must-revalidate directive;
    

  •  类似资料:
    • 使用 rax-plugin-pwa 插件,可以方便快捷的使用 Service Worker 控制缓存,以获得更快的加载速度。 首先,安装 build-plugin-rax-pwa 插件依赖: $ npm install build-plugin-rax-pwa --save 在工程配置 build.json 中添加 pwa 插件并配置缓存目标: { "plugins": [ [

    • 主要内容:1.AP 特性,2.服务状态,3.Eureka Server,4.缓存机制,5.Eureka Client,6.默认配置下服务消费者最长感知时间,7.网关实现服务下线实时感知1.AP 特性 从 CAP 理论看,Eureka 是一个 AP 系统,优先保证可用性(A)和分区容错性&sect;,不保证强一致性&copy;,只保证最终一致性,因此在架构中设计了较多缓存。 2.服务状态 Eureka 服务状态 enum 类:com.netflix.appinfo.InstanceInfo.Ins

    • 本文向大家介绍深入理解Ruby on Rails中的缓存机制,包括了深入理解Ruby on Rails中的缓存机制的使用技巧和注意事项,需要的朋友参考一下 几个场景 首先,让我先来带您浏览几个 ChangingThePresent.org 中的页面吧。我将显示站点中几个需要缓存的地方。然后,再指出我们为其中每个地方所做出的选择以及为实现这些页面所使用的代码或策略。尤其会重点讨论如下内容:    

    • 本文向大家介绍Android 图片缓存机制的深入理解,包括了Android 图片缓存机制的深入理解的使用技巧和注意事项,需要的朋友参考一下 Android 图片缓存机制的深入理解 Android加载一张图片到用户界面是很简单的,但是当一次加载多张图片时,情况就变得复杂起来。很多情况下(像ListView、GridView或ViewPager等组件),屏幕上已显示的图片和即将滑动到当前屏幕上的图片数

    • 我正在将使用JSP的5年前的Spring MVC应用程序移植到Spring Boot。因此,根据http://docs.spring.io/spring-boot/docs/current-snapshot/reference/htmlsingle/#boot-features-jsp-limittings中的示例,我使用了“war”打包。 我很乐意增加tomcat缓存,但是我没有找到在Sprin

    • 我在我的工作场所开始学习詹金斯。我们对Teamcity使用语义版本控制,我想在Jenkins上实现同样的功能。当我将工件存储在builds文件夹($JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_NUMBER)中时,出现了我的问题,因为JENKINS仅使用BUILD_NUMBER为BUILD创建文件夹,因此当我必须重置反BUILD_NUMBER时,未来工件将存储