`
yingyingol
  • 浏览: 744975 次
文章分类
社区版块
存档分类
最新评论

HTTP Caching 优化网站

阅读更多

HTTP Caching 用好了,可以极大的减小服务器负载和减少网络带宽。十分有必要深入了解下 http 的 caching 协议。

  先来看下请求/响应过程:

http 请求/响应

http 请求/响应

  1、用 Last-Modified 头

  在第一次请求的响应头返回 Last-Modified 内容,时间格式如:Wed, 22 Jul 2009 07:08:07 GMT。是零时区的 GMT 时间,servlet 中可以用 response.addDateHeader ("Last-Modified", date.getTime ()); 加入响应头。如图:

last-modified 和 If-Modified-Since

last-modified 和 If-Modified-Since

  Last-Modified 与 If-Modified-Since 对应的,前者是响应头,后者是请求头。服务器要处理 If-Modified-Since 请求头与 Last-Modified 对比看是否有更新,如果没有更新就返回 304 响应,否则按正常请求处理。如果要在动态内容中使用它们,那就要程序来处理了。

  ps:servlet 取 If-Modified-Since 可以用 long last = requst.getDateHeader ("If-Modified-Since");

  2、用 Etag 头

  很多时间可能不能用时间来确定内容是否有更新。那可以用 Etag 头,etag 是以内容计算一个标识。计算的方式可以自己决定,比如可以用 crc32、md5等。

Etag 和 If-None-Match

Etag 和 If-None-Match

  Etag 与 If-None-Match 是对应的,前者是响应头,后者是请求头。服务器要判断请求内容计算得到的 etag 是否与请求头 If-None-Match 是否一致,如果一致就表示没有更新,返回 304 就可,否则按正常请求处理。可以参考:用 HttpServletResponseWrapper 实现 Etag 过滤器

  3、用 Expires 头,过期时间

  当请求的内容有 Expires 头的时候,浏览器会在这个时间内不去下载这个请求的内容(这个行为对 F5 或 Ctrl+F2 无效,用 IE7,Firefox 3.5 试了,有效的比如:在地址输入后回车)。

expires 过期时间

expires 过期时间

  在 servlet 中可以用 response.addDateHeader ("Expires", date.getTime ()); 添加过期内容。

  ps:在 httpwatch 中可以看到 Result 为 (Cached) 状态的。

  4、用 max-age 的 Cache-Control 头

  max-age 的值表示,多少秒后失效,在失效之前,浏览器不会去下载请求的内容(当然,这个行为对 F5 或 Ctrl+F2 无效)。比如:服务器写 max-age 响应:response.addHeader ("Cache-Control", "max-age=10");

  ps:如果你还要加一些 Cache-Control 的内容,比如:private,最好不要写两个 addHeader,而是一个 response.addHeader ("Cache-Control", "private, max-age=10"); 否则 ie 可能对 max-age 无效,原因它只读第一个 Cache-Control 头。

  小结:

  Last-Modified 与 Etag 头(即是方式 1 和2)还是要请求服务器的,只是仅返回 304  头,不返回内容。所以浏览怎么 F5 ,304 都是有效的。但用 Ctrl+F5 是全新请求的(这是浏览器行为,不发送缓存相关的头)。

  Expires 头与 max-age 缓存是不需要请求服务器的,直接从本地缓存中取。但 F5 会忽视缓存(所以使用 httpwatch 之类的 http 协议监察工具时,不要 F5 误认为 Expires 和 max-age 是无效的)。

  http 协议监察工具:

  Firebox:httpfox、live http header

  IE:httpwatch、iehttpheader

1
0
分享到:
评论

相关推荐

    前端开源库-caching-coffeeify

    前端开源库-caching-coffeeify缓存coffeify,一个coffeify版本,缓存以前编译的咖啡脚本以优化咖啡脚本编译步骤。

    PHP 应用性能最优化实践

    PHP 应用性能最优化实践 1. benchmarkding 2. improving client downloading 3. php code optimizing 4. opcode caching 5. variable caching ......

    check-gatsby-caching:检查您的Gatsby网站的缓存控制标头是否正确和优化

    检查缓存 验证Gatsby站点的缓存头。 在您的终端中运行 npx check-gatsby-caching https://url-of-your-gatsby-site.com

    Asp.NET性能优化.rar

    根据经验的总结,让我们来看看十个能帮助你提升你的应用程序性能的经验,我将按将它们...后台处理 ,七、 页面输出缓存和代理服务 ,八、 用IIS6.0的Kernel Caching ,九、 用Gzip压缩数据 , 十、 服务器控件的ViewState

    论文研究-An Algorithm on Video Caching Design in Content Delivery Network.pdf

    一种CDN视频缓存设计的优化算法,吴凯,王晨升,现代信息科技的发展带来的是多媒体内容流量的爆炸性增长,其中以视频点播业务为代表。为了尽量降低这种现状所带来的网络延迟问题,�

    .net性能优化宝典

    1.12 使用适当的Caching策略来提高性能... 17 2. Ado.Net 17 2.1 应用Ado.net的一些思考原则... 18 2.2 Connection. 18 2.2.1 在方法中打开和关闭连接... 18 2.2.2 显式关闭连接... 18 2.2.3 确保连接池启用.....

    利用客户端缓存对网站进行优化的原理分析第1/2页

    很多人首先会想从服务器缓存方面着手对程序进行优化,许多不同的服务器缓存方式都有他们自己的特点,像我曾经参与的一些项目中,根据缓存的命中率不同使用过 Com+/Enterprise Libiary Caching/Windows服务,静态文件等...

    tris-gulp-boilerplate:借助具有所有必要工具和优化功能的gulp样板,您可以大放异彩

    tris-gulp-boilerplate —少思考,多代码 :woman::laptop: :man::laptop:这个样板消除了设置项目的所有麻烦,它为您的网站准备了所有必要的工具和优化。 通过解决在上测试您的网站时出现的问题,它将帮助您在Google...

    ORACLE DBA 手册

    调整优化模式optimizer_index_caching 13 调整优化模式optimizer_index_cost_adj 13 调整优化模式optimizer_max_permutations 14 并行优化 14 parallel_adaptive_multi_user: 14 Parallel_automatic_tuning: 14 参数...

    微软内部资料-SQL性能优化2

     http://ntperformance/ Memory Definitions Memory Definitions Before we look at how SQL Server uses and manages its memory, we need to ensure a full understanding of the more common memory ...

    每个程序员都应该了解的知识有哪些?(二)

     1、只要有机会,使用缓存机制,了解并合理地使用 HTTP caching 以及 HTML5 Manifest。  2、优化图片使用 ,不要把一个20KB的图片文件,作为重复出现的网页背景图案。 不要使用20KB图片来平铺网页背景。  3...

    ASP.NET Cache的一些总结分享

    1.1.2 正文 不同位置的缓存 在Web应用程序中的使用缓存位置主要有:客户端浏览器缓存、客户端和服务器中以及服务器端,因此缓存可以分为以下几类: 客户端缓存(Client Caching) 代理缓存(Proxy Caching) 反向...

    令人敬畏的wp加速:插件和资源可加快和优化WordPress网站

    令人敬畏的wp加速:插件和资源可加快和优化WordPress网站

    性能反弹:性能优化项目-模拟现实场景,其中必须优化桌面VR应用程序才能发布

    性能反弹-高浸没专业化总览这个项目让我有机会练习从Nanodegee程序学到的最新优化技能。 Udacity向我展示了一款性能极差的VR游戏,我的目标是利用自己的才能将其优化为稳定的90fp​​s。为什么要这个项目? 性能优化...

    提升Windows 7下的U盘的性能

    在这个U盘上点右键,选择"属性",打开"策略"选项卡,可以看到两个选项,一个是优化快速移除(Optimize for quick removal),一个是优化性能(Optimize for performance),选择下面那一个就可以了。 点OK之后...

    微软内部资料-SQL性能优化5

    Contents Overview 1 Lesson 1: Index Concepts 3 Lesson 2: Concepts – Statistics 29 Lesson 3: Concepts – Query Optimization 37 Lesson 4: Information Collection and Analysis 61 Lesson 5: Formulating ...

    nodejs手册中文版.pdf

     Optimizations to the `node_modules` Lookup Process 优化 `node_modules` 的查找过程 o Folders as Modules 目录作为模块 o Caching 缓存 o All Together... 总结一下... o Loading from the `require.paths ...

    关于CDN的一些基本知识

    互联网上传递的内容,大部分为重复的Web/FTP 数据,Cache服务器及应用Caching技术的网络设备,可大大优化数据链路性能,消除数据峰值访问造成的结点设备阻塞。 cache服务器具有缓存功能,所以大部分网页对象...

    gradle-6.6-all.zip 快速下载

    Gradle-6.6此版本最大亮点是引入了一个实验性选项:配置缓存(Configuration caching),它是一个主要的性能优化特性,可以使 Gradle 跳过构建的配置阶段,并尽快开始执行任务。

    gradle-6.6.1-all.zip 快速下载

    Gradle-6.6.1 此版本最大亮点是引入了一个实验性选项:配置缓存(Configuration caching),它是一个主要的性能优化特性,可以使 Gradle 跳过构建的配置阶段,并尽快开始执行任务。

Global site tag (gtag.js) - Google Analytics