HTTP的场景实践 | 青训营

88 阅读7分钟

前言:HTTP的场景实践,本文选择谷歌浏览器(Chrome)来介绍HTTP缓存策略的场景实践,在谷歌浏览器(Chrome)中,可以通过开发者工具来查看和操作HTTP缓存策略的场景实践,谷歌浏览器利用强缓存、协商缓存和Service Worker缓存等策略,可以有效地减少网络请求,提升页面加载性能和用户体验。

一、缓存策略介绍

谷歌浏览器(Chrome)在HTTP请求中涉及的缓存策略包括以下几种:

  1. 强缓存(Expires和Cache-Control):

    • Expires:服务器响应头中的Expires字段指定了资源的过期时间,浏览器会在这个过期时间之前直接从缓存中加载资源,不再发送请求。缺点是依赖于客户端和服务器的时间设置,可能存在不同步的问题。
    • Cache-Control:服务器响应头中的Cache-Control字段可以设置多个指令,例如max-age、no-cache、no-store等。其中max-age指定了资源在缓存中的最大存储时间(单位为秒),浏览器在这个时间内会直接从缓存中加载资源。
  2. 协商缓存(Last-Modified和ETag):

    • Last-Modified:服务器响应头中的Last-Modified字段表示资源的最后修改时间。浏览器在下一次请求时会发送If-Modified-Since字段,将上次的Last-Modified值发送给服务器,如果资源在这个时间之后没有修改,服务器会返回304 Not Modified,浏览器会直接从缓存中加载资源。
    • ETag:服务器响应头中的ETag字段是一个唯一标识符,表示资源的版本号。浏览器在下一次请求时会发送If-None-Match字段,将上次的ETag值发送给服务器,如果资源的ETag值没有改变,服务器会返回304 Not Modified,浏览器会直接从缓存中加载资源。
  3. Service Worker缓存:

    • Service Worker是一种在浏览器后台运行的脚本,可以拦截和处理网络请求。开发者可以使用Service Worker来实现自定义的缓存策略,例如将某些资源预先缓存,离线访问等。

总结起来,谷歌浏览器使用强缓存和协商缓存的策略来优化HTTP请求的性能。强缓存利用Expires和Cache-Control指令,可以直接从缓存中加载资源,减少了网络请求的次数。协商缓存使用Last-Modified和ETag,通过与服务器进行比较,判断资源是否有更新,避免了不必要的数据传输。另外,使用Service Worker缓存可以进一步提高缓存的灵活性和性能。

二、缓存策略的场景实践步骤

  1. 强缓存(Expires和Cache-Control)的场景实践步骤:

    • 浏览器首次请求资源时,服务器响应头中的Expires字段或Cache-Control字段指定了资源的过期时间(例如设置为1小时)。
    • 浏览器会将此资源缓存起来,并在下一次请求时检查缓存是否有效。
    • 如果缓存有效(即当前时间在过期时间之前),浏览器直接从缓存中加载资源,不再发送请求。
    • 如果缓存过期(即当前时间在过期时间之后),浏览器发送请求,服务器响应新的资源,并将新的过期时间更新到缓存中。
  2. 协商缓存(Last-Modified和ETag)的场景实践步骤:

    • 浏览器首次请求资源时,服务器响应头中的Last-Modified字段表示资源的最后修改时间,并返回资源内容。
    • 浏览器将此资源和Last-Modified值缓存起来,并在下一次请求时发送If-Modified-Since字段,将上次的Last-Modified值发送给服务器。
    • 服务器收到请求后,会将资源的最新修改时间与If-Modified-Since值进行比较。
    • 如果资源没有修改,服务器返回304 Not Modified,浏览器直接从缓存中加载资源,不再发送请求。
    • 如果资源有修改,服务器返回新的资源和新的Last-Modified值,浏览器将新的资源和新的Last-Modified值缓存起来。
  3. Service Worker缓存的场景实践步骤:

    • 开发者注册并安装一个Service Worker脚本,用于拦截和处理网络请求。
    • 在Service Worker脚本中,开发者可以自定义缓存策略,例如将某些资源预先缓存或者在离线时提供缓存的资源。
    • 当浏览器发起请求时,Service Worker会拦截请求并根据缓存策略决定是直接从缓存中返回响应还是继续向服务器发起请求。
    • 如果缓存中存在匹配的响应,Service Worker会从缓存中加载响应并返回给浏览器。
    • 如果缓存中不存在匹配的响应,Service Worker会向服务器发起请求,并将响应存储到缓存中供以后使用。

通过以上场景实践步骤,谷歌浏览器利用强缓存、协商缓存和Service Worker缓存等策略,可以有效地减少网络请求,提升页面加载性能和用户体验。

三、HTTP缓存策略的场景实践操作

以强缓存Cache-Control为例,在谷歌浏览器的开发者工具中,可以进行以下操作来观察和测试缓存策略的效果:

  1. 首先打开谷歌浏览器并访问需要测试的网页并打开开发者工具。在开发者工具中,切换到"Network"(网络)选项卡。 在"Network"(网络)选项卡的顶部,有一个"Disable cache"(禁用缓存)的按钮,点击该按钮来禁用缓存。 刷新页面,观察请求的缓存状态:

    • 如果请求的响应状态码为200,则表示该请求是从服务器获取的新响应。
    • 如果请求的响应状态码为304,则表示该请求的响应来自缓存,没有从服务器重新获取。 image.png

image.png 2. 在请求列表中选择一个请求,可以查看和修改请求头中的缓存相关字段:

  • 在请求的详细信息中,可以查看响应头中的缓存相关字段,例如Expires、Cache-Control、Last-Modified、ETag等。
  • 如果你想测试不同的缓存策略,可以在请求头中添加或修改这些字段的值,然后重新发送请求。如在"Request Headers"(请求头)部分,可以找到"Cache-Control"字段。修改或添加"Cache-Control"字段的值,例如设置为"no-cache"或"max-age=3600"等。点击工具栏中的"刷新"按钮以重新发送请求。 这样可以模拟不同的缓存策略,并观察请求和响应的变化。(注意:修改请求头的操作仅在当前的开发者工具会话中生效,并不会永久更改请求头。)
  • 如果你想强制浏览器重新发送请求,可以右键点击请求并选择"Clear"(清除)选项,然后刷新页面。(这将清除该请求的缓存,浏览器将重新发送请求并获取最新的响应。)
  1. 总结:通过以上操作,你可以观察和测试缓存策略的效果。你可以禁用缓存、观察请求的缓存状态、修改请求头中的缓存相关字段,以及强制浏览器重新发送请求,来了解和测试不同缓存策略对请求和响应的影响。我们可以知道强缓存是一种缓存策略,其作用是在一定的时间内直接从本地缓存中加载资源,而无需发送请求到服务器。其减少网络请求,提高页面加载性能,提升用户体验,能减少数据传输,提高服务器的性能和稳定性。

    需要注意的是,强缓存是根据资源的过期时间或者最大存储时间来判断是否使用缓存的。因此,在使用强缓存的同时,需要确保缓存的有效期设置合理,以避免缓存过期而导致加载过时的资源。通常可以通过设置Expires和Cache-Control字段来指定资源的过期时间或最大存储时间。 image.png

image.png