博客
关于我
浏览器Etag的原理
阅读量:647 次
发布时间:2019-03-15

本文共 1531 字,大约阅读时间需要 5 分钟。

Etag与Last-Modified的性能优化作用及HTTP缓存机制

Etag与Last-Modified的作用

在HTTP协议中,Etag和Last-Modified是两种常用的缓存机制,它们各自解决了不同的问题。理解它们的区别和适用场景,对于提升Web应用性能至关重要。

1. Last-Modified的局限性

  • 修改时间精度不足:LAST-MODIFIED仅记录文件的修改时间,精度一般为秒,无法捕捉秒级或更频繁的修改。
  • 无法检测内容变化:如果文件仅发生内容变化而未修改修改时间,LAST-MODIFIED无法检测到这一变化。
  • 服务器时间不一致:某些服务器可能无法精准记录文件的最新修改时间,这会导致缓存机制失效。

2. Etag的优势

Etag(实体标签)提供了另一种验证文件是否最新的方法,通过强唯一性的标识符,准确表征文件内容和状态。与LAST-MODIFIED相比:

  • 更精确的内容验证:Etag确保文件内容完全一致,而非仅仅依赖修改时间。
  • 覆盖LAST-MODIFIED的局限性:Etag可以在秒级或更频繁的修改情况下,有效防止不必要的缓存重新获取。
  • 灵活性:Etag的格式不受严格限制,服务器可以根据需求定义具体内容。

3. 工作流程

  • 第一次请求:服务器返回文件并设置Etag和LAST-MODIFIED。
  • 后续请求:客户端通过If-None-Match头发送Etag进行验证,服务器检查确认无修改后,返回304 Not Modified。

4. 与Cache-Control的协同作用

  • Cache-Control: max-age:指定缓存有效期,减少重复请求。
  • Expires:明确缓存过期时间,兼容旧浏览器。
  • 结合使用:当同时设置Cache-Control和Expires时,服务器会优先考虑Cache-Control的信息。 cache-control: max-age=5表示在5秒内无需重新获取。

HTTP 缓存机制:详细解析

HTTP缓存机制通过Cache-Control头部指令控制客户端缓存行为,常见取值包括:

1. 打开新标签/窗口

  • Cache-Control: private:仅供当前客户端使用,不存储。
  • Cache-Control: no-cache:不进行缓存,所有请求都重新获取。
  • Cache-Control: must-revalidate:重新获取元信息以确认缓存有效性。

2. 在地址栏回车或按刷新

  • Cache-Control: private/must-revalidate:仅在首次访问时获取,不会重复。
  • Cache-Control: no-cache:每次都会重新获取。

3. 按后退或刷新

  • Cache-Control: private/must-revalidate/max-age:不会重复访问(除非过期)。
  • Cache-Control: no-cache:每次都会重复获取。

4. 按右键保存图片等操作

Cache-Control: no-cache确保这些操作不会在本地临时保存文件。

HTTP 相关指令示例

// 设置404错误页面响应显示HTTP/1.1 404 Not Found// 定义链接重定向Location: /newUrlCache-Control: max-age=3600

进一步优化HTTP响应

  • 去除Date和Expires头部信息。
  • 保留Cache-Control,进行本地缓存管理。
  • 避免不必要的信息,简化响应头。
  • 通过合理配置Etag、Last-Modified和Cache-Control,可以有效提升Web应用的性能和用户体验,减少不必要的服务器负载和数据传输。

    转载地址:http://vdymz.baihongyu.com/

    你可能感兴趣的文章
    Python+requests+unittest执行接口自动化测试详情
    查看>>
    python+requests+unittest执行自动化接口测试!
    查看>>
    Python+Requests编码识别Bug
    查看>>
    python函数编写_[零基础学python]传说中的函数编写条规
    查看>>
    Python+selenium —— UI自动化之鼠标操作
    查看>>
    python函数注释,参数后面加冒号:,函数后面的箭头→是什么?
    查看>>
    Python+Selenium+Threading进行兼容性测试
    查看>>
    Python+selenium+unittest的GUI自动化框架实现
    查看>>
    python函数拟合不规则曲线_Python计算&绘图——曲线拟合问题(转)
    查看>>
    python函数定义的基本格式_零基础学python-2.19 定义函数、调用函数与默认参数
    查看>>
    Python+Selenium之数据驱动测试的实现
    查看>>
    python函数定义与使用+返回值简解
    查看>>
    Python+Selenium登录
    查看>>
    Python日期时间模块
    查看>>
    Python函数合集:足足68个内置函数请收好!
    查看>>
    Python+Selenium自动化测试项目实战
    查看>>
    Python+Selenium自动化测试项目实战【建议收藏】
    查看>>
    Python+Selenium自动化测试:Page Object模式
    查看>>
    python+selenium进行cnblog的自动化登录测试
    查看>>
    Python函数只返回第一个值而不是数据框
    查看>>