首页
学习
活动
专区
圈层
工具
发布

跟我一起探索 HTTP-HTTP缓存

例如,对于带有 Accept-Language: en 标头并已缓存的英语内容,不希望再对具有 Accept-Language: ja 请求标头的请求重用该缓存响应。...不知道在过时的实现中会发生什么。 在这种情况下,no-store 并不总是最合适的指令。 以下部分更详细地介绍了这些情况。...备注: 只有在设置了 Authorization 标头时需要存储响应时才应使用 public 指令。否则不需要,因为只要给出了 max-age,响应就会存储在共享缓存中。...例如,允许通过 API 或仪表板操作清除缓存的 CDN 将通过存储主要资源并仅在服务器上发生更新时显式清除相关缓存来实现更积极的缓存策略。...如果 service worker 可以在服务器上发生更新时删除缓存 API 中的内容,它也可以这样做。

74851

网页性能优化浅谈与实践

[TOC] 0x00 前言简述 0x01 网页性能优化关键点 数据缓存 描述: 当我们访问某一个网页时浏览器第一次加载网页时,会将页面资源存储在 HTTP缓存中。...通常 cache-control 被认为是一种比 expires(到期) 更现代,更灵活的方法,但是两个标头可以同时使用。 Q: 如何进行缓存?...答: 通过标识资源或资源类型(例如图像或CSS文件),然后使用所需的缓存选项指定资源的标头,来启用缓存。...此后对内容的请求必须返回到原始服务器。使用更新且更灵活的高速缓存控制标头expires标头通常用作备用。 Tips : Pragma 是旧产物,已经逐步抛弃,有些网站为了向下兼容还保留了这两个字段。...Tips : 缓存是提高页面加载速度并从而提高用户体验的可靠且省力的方法。它足够强大,可以为特定的内容类型提供细微差别,但是足够灵活,可以在网站内容发生更改时轻松进行更新。

79620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【译】Envoy threading model

    为了纠正这个问题,我打算做一系列关于各种子系统的博客文章。 由于这是第一篇文章,请让我知道您的想法以及您希望了解的其他主题。...Envoy采用了一个非常复杂的系统来处理线程本地的统计数据。 这将是一个单独的帖子的主题。 但是,我将简要提一下,作为线程本地统计处理的一部分,有时需要获取对中央“stat store”的锁定。...(实质上,工作线程在工作时从不会看到TLS插槽中的数据发生任何变化。更改只发生在工作事件之间的静止期间)。...特使以两种不同的方式使用它: 通过在没有任何锁定的情况下访问每个工作人员存储不同的数据 通过将共享指针存储到每个worker的只读全局数据。...HTTP日期标头缓存:事实证明,在每个请求上计算HTTP日期标头(当每个核心执行~25K + RPS时)非常昂贵。 Envoy大约每半秒计算一次日期标题,并通过TLS和RCU将其提供给每个工作人员。

    1.3K50

    JavaScript 编程精解 中文第三版 二十一、项目:技能分享网站

    这类聚会往往是可以免费参加的,而且我发现我参加过的那些聚会都非常友好热情。 在最后的项目章节中,我们的目标是建立网站,管理特定技能分享会的讨论内容。...服务器发现 Fatma 在等待更新请求,并将新的对话作为响应发送给待处理的请求。Fatma 的浏览器将会接收到数据并更新屏幕展示对话内容。...为了将长轮询请求与常规条件请求区分开来,我们给他们另一个标头Prefer: wait=90,告诉服务器客户端最多等待 90 秒的响应。 服务器将保留版本号,每次对话更改时更新,并将其用作ETag值。...来查看是否存在If-None-Match和Prefer标头。...如果请求是有条件的,并且对话没有变化,我们查阅Prefer标题来查看,是否应该延迟响应或立即响应。 用于延迟请求的回调函数存储在服务器的waiting数组中,以便在发生事件时通知它们。

    1.5K30

    对不起,看完这篇HTTP,真的可以吊打面试官

    一般来说,客户端用 Accept 头告诉服务器希望接收什么样的数据,而服务器用 Content 头告诉客户端实际发送了什么样的数据。 为什么需要内容协商 我们为什么需要内容协商呢?...什么是新鲜的数据 一旦资源存储在缓存中,理论上就可以永远被缓存使用。...另一方面,服务器上的缓存也会定期进行更新,HTTP 作为应用层的协议,它是一种客户-服务器模式,HTTP 是无状态的协议,因此当资源发生更改时,服务器无法通知缓存和客户端。...这个概念是允许所有的客户端获取资源的副本,然后让他们在本地修改资源,并成功通过允许第一个客户端提交更新来控制并发,基于此服务端的后面版本的更新都将被拒绝。 ?...虽然这是合法的,因为它们是在客户端上存储数据的唯一方法,但如今建议使用现代存储 API。Cookie 随每个请求一起发送,因此它们可能会降低性能(尤其是对于移动数据连接而言)。

    7.5K21

    18 个运维必知的 Nginx 代理缓存配置技巧,你都掌握了哪些呢?

    如果客户端请求缓存已存储的内容,则它会直接返回内容而不连接源服务器。这提高了性能,因为内容缓存更靠近客户端,并且更有效地使用应用程序服务器,因为它们不必每次都从头开始生成页面。...1 MB 区域可以存储大约 8,000 个密钥的数据,因此示例中配置的 10 MB 区域可以存储大约 80,000 个密钥的数据。 max_size 设置缓存大小的上限(在本例中为 10 千兆字节)。...Nginx 如何缓存动态内容 只要 Cache-Control 标头允许。即使在很短的时间内缓存动态内容也可以减少原始服务器和数据库的负载,从而缩短第一个字节的时间,因为不必为每个请求重新生成页面。...这些扩展做了什么: 如果当前正在更新 stale-while-revalidate,Cache-Control HTTP 标头的扩展允许使用陈旧的缓存响应。...HTTP 标头的 stale-if-error 扩展 Cache-Control 允许在发生错误时使用陈旧的缓存响应。

    3.3K20

    震惊 | HTTP 在疫情期间把我吓得不敢出门了

    一般来说,客户端用 Accept 头告诉服务器希望接收什么样的数据,而服务器用 Content 头告诉客户端实际发送了什么样的数据。 为什么需要内容协商 我们为什么需要内容协商呢?...另一方面,服务器上的缓存也会定期进行更新,HTTP 作为应用层的协议,它是一种客户-服务器模式,HTTP 是无状态的协议,因此当资源发生更改时,服务器无法通知缓存和客户端。...但是,现实情况是不可能只有单个用户出现的,所以为了规避或者避免这个问题,我们希望客户端资源在更新时进行提示或者修改被拒绝时收到通知。 条件请求允许实现乐观锁算法。...这个概念是允许所有的客户端获取资源的副本,然后让他们在本地修改资源,并成功通过允许第一个客户端提交更新来控制并发,基于此服务端的后面版本的更新都将被拒绝。...虽然这是合法的,因为它们是在客户端上存储数据的唯一方法,但如今建议使用现代存储 API。Cookie 随每个请求一起发送,因此它们可能会降低性能(尤其是对于移动数据连接而言)。

    6.3K20

    揭秘HTTP3优先级

    新系统在发送紧急和增量信号的方式上也更简单:这里使用的并非特殊的HTTP/3消息,而是名为priority的新文本HTTP标头。...实际HTTP标头只能用于表达资源的初始优先级,一旦稍后需要更新优先级(比如延迟加载的图像最初获得低优先级,但在滚动至视图内时需要切换至高优先级),那单靠HTTP标头就实现不了了。...毕竟在新系统中,这是靠HTTP标头完成的,我们可以在fetch()调用中设置自定义标头!不出所料,在手动发出priority: u=0,1 这条标头后,三款浏览器又做出了彼此不同的反应。...图九:不同浏览器在处理自定义优先级HTTP标头时的差异。 Chromium会同时发送Priority_update帧加自定义标头。...最后,Safari用我们传递给fetch()的一个标头覆盖了自己的标头,这可以算是“正确”(至少符合预期)的反应。 总体而言,我对浏览器允许手动设置标头感觉有点意外。

    1.1K20

    「HTTP标头」都给你整理好了

    本文公众号来源:Java建设者 作者:cxuan 本文已收录至我的GitHub HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、...Accept-Encoding 表示 HTTP 标头会标明客户端希望服务端返回的内容编码,这通常是一种压缩算法。...ETag 响应头是特定版本的标识,它能够使缓存变得更高效并能够节省带宽,因为如果缓存内容未发生变更,Web 服务器则不需要重新发送完整的响应。除此之外,ETag 能够防止资源同时更新互相覆盖。 ?...Last-Modified 实体字段 Last-Modified 指明资源的最后修改时间,它用作验证器来确定接收或存储的资源是否相同。...它的一般表示如下 如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。

    6.7K41

    HTTP的缓存机制是什么?

    缓存标头:HTTP 协议提供了一些特定的缓存标头,如 ETag(实体标签)和 Last-Modified(最后修改时间),用于识别和比较资源的不同版本。...常用的 Cache-Control 指令包括 public:允许任何缓存存储副本。 private:仅允许单个用户的缓存存储副本。 max-age:指定缓存副本的有效时间(以秒为单位)。...客户端在后续请求中可以通过发送 If-None-Match 标头将 ETag 发送回服务器,以检查资源是否发生了变化。...客户端在后续请求中可以通过发送 If-Modified-Since 标头将最后修改时间发送回服务器,以检查资源是否发生了变化。...服务器根据 ETag 或 Last-Modified 标头来确定资源是否发生了变化,并返回相应的状态码(如 304 Not Modified),以指示客户端使用缓存副本。

    67720

    WEB缓存探究

    Cache-Control Cache-Control 标头是在 HTTP/1.1 规范中定义的,取代了之前用来定义响应缓存策略的标头例如 Expires。...禁止浏览器以及所有中间缓存存储任何版本的返回响应,每次请求必须重新下载 Expires 它代表一个缓存过期的绝对时间,在HTTP/1.0中实现,在HTTP/1.1中优先级低于Cache-Control...只能精确到秒级,如果某些文件在1秒内修改多次,则无法及时更新 ETag 相当于验证令牌。通过它可以可实现高效的资源更新检查:资源未发生变化时不会传送任何数据。...标头,则理论上也可以省略Cache-Control,并仅依赖于Expires。...HTTP 1.0) 项目实践 更新文件&弃用缓存 在项目中,当我们使用本地缓存后又会遇到另一个问题——如何更新文件、弃用缓存。

    88640

    你还在为 HTTP 的这些概念头疼吗?

    尽管通用标头不会限定于是请求还是响应报文,但是某些通用标头大部分或全部用于一种特定类型的请求中。也就是说,如果某个通用标头出现在请求报文中,那么大部分通用标头都会显示在该请求报文中。...Accept-Encoding 表示 HTTP 标头会标明客户端希望服务端返回的内容编码,这通常是一种压缩算法。...如果在指定日期时间后发生了更新,则以状态码 412 Precondition Failed 作为响应返回。...ETag 响应头是特定版本的标识,它能够使缓存变得更高效并能够节省带宽,因为如果缓存内容未发生变更,Web 服务器则不需要重新发送完整的响应。除此之外,ETag 能够防止资源同时更新互相覆盖。 ?...Last-Modified 实体字段 Last-Modified 指明资源的最后修改时间,它用作验证器来确定接收或存储的资源是否相同。

    2.7K30

    HTTP缓存机制的Etag、Last-Modified、If-None-Match和If-Modified-Since、Expires和Cache-Control笔记

    不过Last-Modified表示响应资源在服务器最后修改时间而已。...可以通过将Expires HTTP版本1.0标头字段值设置为早于响应时间的时间来进行模拟。Cache-Control相对于Expires更加具体,细致。...它是浏览器告诉服务器和任何中间缓存它想要新资源的一种手段。这个和HTTP / 1.0规范中定义的Pragma:no-cache头字段具有相同的目的。但是,它仅为请求标头定义。...不应缓存资源的请求并不保证它不会写入磁盘。特别是,HTTP / 1.1定义区分了历史存储和缓存。如果用户导航回上一页,浏览器仍可能会显示已存储在历史记录存储中的磁盘上的页面。根据规范,这是正确的行为。...,如果不是最新的,则返回新的内容,如果是最新的,则返回 304 和空响应体告诉客户端其本地 cache 的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担

    3.5K20

    通过 Node.js 小示例学习浏览器缓存策略

    协商缓存策略 协商缓存是当强缓存没有命中的情况或者按下 F5 键刷新页面会触发,它每次都会携带标识与服务器进行校验,符合则返回 304 标识,表示资源没有更新,如果协商缓存也失效了,进入下一个阶段获取最新数据...proxy-revalidate:主要用在缓存服务器,指定缓存服务器在过期后重新从原服务器获取,不能从本地获取 其它 no-store:本地和代理服务器都不可以存储这个缓存,永远都要从服务器拿 body...是因为我们请求的 url /script.js 没有变,那么浏览器就不会经过服务端的验证,会直接从客户端缓存去读,就会导致一个问题,我们的js静态资源更新之后,不会立即更新到我们的客户端,这也是前端开发中常见的一个问题...,我们是希望浏览器去缓存我们的静态资源文件(js、css、img等)我们也不希望服务端内容更新了之后客户端还是请求的缓存的资源, 回答第二个问题 在使用webpack等一些打包工具时,为什么要加上一串hash...反映到页面上就是你的 url 没有变,如果你的文件内容有变化那么嵌入到页面的文件 url 就会发生变化,这样就可以达到一个更新缓存的目的,这也是目前前端来说比较常见的一个静态资源方案。

    1.5K30

    Spring Security 之防漏洞攻击

    然后使用CSRF令牌更新表单并提交。 另一种选择是使用一些JavaScript,让用户知道会话即将到期。用户可以单击按钮继续并刷新会话。 最后,预期的CSRF令牌可以存储在cookie中。...更一般地说,将敏感数据放在正文或标头中以确保其不泄漏被认为是最佳做法。 HiddenHttpMethodFilter 在某些应用程序中,表单参数可用于覆盖HTTP方法。...如果用户通过身份验证查看敏感信息然后注销,我们不希望恶意用户能够单击后退按钮查看敏感信息。默认情况下发送的缓存控制标头为: Example 2....,可以删除任何浏览器端数据(cookie、本地存储等)。...Custom Headers SpringSecurity有一些机制,可以方便地将更常见的安全标头添加到应用程序中。它还提供了钩子来支持添加自定义头。

    3.1K20

    在Spring Boot中实现HTTP缓存

    数据库具有其缓存存储,Web客户端也在其需要重用的信息。HTTP协议负责网络通信。缓存机制允许我们通过减少客户端和服务器之间传输的数据量来优化网络流量。...但是无论用例如何,我们可以根据缓存的验证发生在哪里进行缓存管理选项的划分。 2.客户端缓存验证 当您知道请求的资源在给定的时间内不会更改时,服务器可以将此类信息作为响应标头发送到客户端。...HTTP缓存在固定的时间内有效:如果要阻止客户端在指定时间内重新获取资源,则应该使用Cache-Control标头,可以在其中指定应该重新获取所获取数据的时间。...应该使用Expires HTTP标头。应使用标准化数据格式之一格式化日期值。...3.服务器端缓存验证 在基于用户输入的动态生成的内容中,更常见的是服务器不知道何时将改变所请求的资源。在这种情况下,客户端可以使用先前获取的数据,但首先,它需要询问服务器该数据是否仍然有效。

    6.3K50

    HTTP 缓存技术

    A typical setting of this fraction might be 10%.如果响应具有Last-Modified header的标头字段(RFC7232的第2.2节),则鼓励缓存使用启发式缓存时间值...官方这话是在暗示你要尽量给资源设置缓存过期时间,因为我建议的这东西不是特别靠谱。...这样可以有更好的用户体验,旧缓存数据的用户在刷新缓存之后就可以看到新内容。通常情况下,在文件名中嵌入文件的版本号来执行此操作,例如style.x234dff.css。...如果一致表示资源没有更新,状态码返回304,浏览器从本地缓存获取,此时响应头会同时返回Etag值。...所以基于时间的判断是不可靠的,Etag标头负责检查文件内容的哈希码,浏览器不需要知道哈希算法,只需要拿客户端请求的Etag值和当前本地缓存比对即可,如果Etag值一致,哪怕此时请求资源响应已经过期了,依然可以用本地缓存文件返回

    1K00

    Ask Apple 2022 中与 Core Data 有关的问答

    没有办法告诉 NSPersistentCloudKitContainer 在帐户消失后保留本地数据(当用户在禁用该 App 的 iCloud 同步时会发生这种情况 )。...在 App Group 中如何立即反应变化Q:当通过应用程序扩展(例如,SiriKit/AppIntents )向存储提交更改时,保证更改立即反映在可能已经运行的主应用程序中的最佳方式是什么( 反之亦然...通常这可以正常工作,但是一旦存储需要迁移( 我们进行轻量级迁移 ),就会出现某种竞争状况,导致应用程序或小组件进程发生崩溃。在一次崩溃之后,迁移似乎可以正常工作,并且没有发生再次崩溃。...用例是:当我打开 Focus 过滤器时,我将 @AppStorage 值更改为用户希望在我的应用程序中看到的标签列表。...总结Ask Apple 中有关 Core Data 的问题应该不是太多,我提的几个问题都获得了解答。希望苹果今后可以经常性地举办类似的活动,大家也应该更踊跃地进行参与。希望本文能够对你有所帮助。

    4.2K20

    HTTP 缓存机制

    : Public 设置我们可以将 HTTP 响应数据存储到本地,但此时并不意味着后续浏览器会直接从缓存中读取数据并使用, 因为它无法确定本地缓存的数据是否可用(可能已经失效),需通过缓存过期策略来判断...2)缓存过期策略 缓存过期策略决定了客户端存储在本地的缓存数据是否已过期,如未过期则可以直接使用本地存储的数据,否则就需要发请求到服务端尝试重新获取数据。...其次, 缓存数据过期只是告诉客户端不能再直接从本地读取缓存了,而是需要再发一次请求到服务器去确认。具体什么情况下本地存储的数据还可以继续使用就与缓存对比策略有关了。...过来,如果判断标识仍然有效,则返回 304 告诉客户端取本地缓存数据来用即可(这里要注意的是你必须要在首次响应时输出相应的头信息( Last-Modified 、 ETags )到客户端)。...关于 last-modified 和 Etag 区别 • 某些服务器不能精确得到资源的最后修改时间,这样就无法通过最后修改时间判断资源是否更新。 • Last-modified 只能精确到秒。

    94120
    领券