第六章 浏览器缓存
浏览器也是Web站点的组成部分。
Http缓存的目的就是彻底消灭不必要的请求。
一个原则: 尽可能将Web站点的内容缓存在用户浏览器中,这可在一定程度上减少服务器的计算开销,同时也可以减少重复传输带来的带宽浪费。(传输率越大,占用带宽越大)
不同浏览器的缓存地点:
IE: 在工具/Internet选项/常规/Internet临时文件/设置 中可以看到临时文件夹的位置。
Firefox: 采用二进制文件的方式来存储和管理缓存文件。它同时使用磁盘和内存来缓存文件。
浏览器的过期检查:
服务端的动态内容缓存包括缓存创建、存储、过期检查等,这由服务器端的动态程序来实现。
浏览器缓存内容在浏览器本地,而内容由Web服务器生成,任何一方不可能独立完成这一系列过程,这就需要Http“缓存协商”。因为浏览器和Web服务器沟通的唯一途径是Http。
缓存协商:
(1) 基于最后修改时间: (Last-Modified/If-Modified-Since)
对于动态内容的缓存: 因为浏览器和Web服务器通过Http通信,它并不关心要缓存的内容是否是动态生成的,只要Http头信息中包含响应的缓存协商信息,动态内容同样可以被浏览器缓存,和缓存静态内容没啥区别。
如果动态程序没有在Http头信息中指明“上次修改时间”,浏览器再次访问时就不知道这个内容在服务器上的生成时间或最后修改时间,没有过期检查依据,就无法使用缓存,只能从服务器重新得到数据。
在动态程序中为Http响应增加最后修改时间的标记(响应头中包含: Last-Modified: Fri, 20 Mar 2009 07:54:04 GMT),浏览器再次请求时就可以利用缓存(Http请求中包含: If-Modified-Since: Fri, 20 Mar 2009 07:54:04 GMT,意指我请求的内容在这个时间之后是否有过更新),具体判断是否过期由服务器端动态程序来完成。
对于静态内容缓存: Web服务器会为静态文件的Http响应自动生成最后修改时间。浏览器再次请求时,带着自己的请求头信息(If-Modified-Since),Web服务器把获得静态文件的最后修改时间和浏览器询问的时间进行对比即可。如果没有过期,Web服务器会返回浏览器 304 Not Modified状态,这意味着浏览器可以使用本地缓存,服务器不在传递响应正文。
(2) 根据Etag: (ETag/If-None-Match)
Http1.1支持这种缓存方法。Etag没有采用内容的最后修改时间而是采用了一串编码来标记内容。Etag可以用MD5计算出来。它能弥补基于最后修改时间的缓存协商的不足,如对于文件频繁更新但内容没有变化,为实现负载均衡的多服务器系统。
在使用SSI内容时,由于整个页面由服务器动态生成,Last-Modified标记在不同的Web服务器中有不同的生成方法.
Apache中,对于SSI内容,默认不附加Last-Modified标记。可通过配置XBitHack来启用Last-Modified。
Lighttpd中,会将父页面中所有子页面的最后修改时间作为整个页面的Last-Modified时间。
(3)Expires:
浏览器看到某个内容有Expires标记后,就不会再向服务器询问,直接访问缓存,这样就彻底消除了Http请求。而以上两种方式都需要与Web服务器交互,由服务器端通知浏览器是否使用浏览器缓存。Expires的过期时间来自于Web服务器的系统时间,Cache-Control: max-age=second 指定缓存过期的相对时间,是相对于浏览器本地时间,second=0表示立即过期。Http响应头中同时含有Expires和Cache-Control时,优先考虑Cache-Control。
常见的请求页面方法:
Ctrl+F5: 直接向服务器发送请求,不使用缓存协商
F5: 一般刷新,允许请求中附加必要的缓存协商。Last-Modified或ETag有效,Expires无效
转到或直接在浏览器地址栏输入URL: Expires有效,这种方式允许浏览器以最少的请求来获取数据。
分享到:
相关推荐
Linux Security Tips(Linux 安全技巧).pdf linux 系统安全与优化中文版 by smallfish.pdf Linux 系统安全与优化中文版221.pdf Linux 进程管理.pdf Linux安全和优化.pdf ... 构建高性能WEB站点.p
例如,Java应用处理业务逻辑,Nginx负责静态资源服务和负载均衡,两者共同构建出高性能的Web服务架构。 这份笔记资料可能详细记录了作者在学习过程中遇到的问题、解决方法以及一些实用技巧,对于初学者和有经验的...
### easyUI笔记知识点详解 #### 一、什么是jQuery EasyUI? **jQuery EasyUI** 是一组基于 jQuery 的 UI 插件集合。它的目标是帮助 Web 开发者更容易地创建功能丰富且美观的用户界面。通过使用 **jQuery EasyUI**...
它提供了一个灵活的框架,允许开发者集成各种Web资源,如内容管理系统(WCM)、portlet应用、以及第三方服务。Portlet是Portal中的基本交互单元,它可以是动态的Web应用程序,如新闻 feed、天气预报或者企业内部的...
1. **轻量级架构**:minIsay的设计理念是简洁,因此其代码结构清晰,资源占用少,对于小型和个人站点而言,运行效率高,且易于部署和维护。 2. **PHP技术栈**:作为一款PHP程序,minIsay充分利用了PHP的灵活性和...
MongoDB是一款高性能、开源、无模式的文档型数据库,被广泛应用于Web开发中,尤其是对于处理JSON、BSON格式数据的应用场景。Ngotes是一个基于MongoDB构建的笔记站点,它利用了MongoDB的强大功能来存储和检索用户的...
【Nginx】是俄罗斯开发的一款高性能的HTTP和反向代理服务器,因其高效稳定、内存消耗小、并发能力...通过本课程的学习,你将能够全面了解Nginx,掌握其基本配置和应用场景,为构建高效稳定的Web服务环境打下坚实基础。
Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,由俄罗斯开发者伊戈尔·赛索耶夫为 Rambler.ru 站点开发,以其稳定性、高效能和低系统资源消耗著称。自 2004 年首次发布以来,Nginx 已经发展成为一个广泛使用的...
- **后端服务开发**:由于 Golang 高效的性能表现,非常适合用于构建高性能的 Web 服务器和 API 服务。 - **云计算/云服务后台**:随着云计算的发展,越来越多的企业开始采用 Golang 来构建云服务的后端系统。 ####...
- **Nginx优势**:高性能、稳定性好、资源消耗低、易于扩展。 - **模块和工作原理**: - Nginx支持多种模块,如HTTP Proxy模块、HTTP FastCGI模块等。 - 工作模式采用异步非阻塞的方式,能够高效处理大量并发请求...
- **Nutch**: 包含大规模爬虫工具,能够抓取和分析Web站点数据。 - **jsoup**: Java HTML解析器,支持直接解析URL地址、HTML文本。 - **Heritrix**: 开源的网络爬虫,具有良好的可扩展性。 #### 索引文件的逻辑...
首先,Gatsby是一款基于React的静态站点生成器,它结合了现代Web开发的最佳实践,如JAMstack(JavaScript、APIs、Markup),为构建高性能的网站提供了一流的解决方案。通过Gatsby,我们可以快速搭建起个人笔记本的...
它简化了React应用的开发流程,提供了诸如自动代码分割、预渲染、路由、热模块替换等特性,让开发者可以快速地构建可扩展的、高性能的Web应用。 **Notion API** Notion是一款强大的笔记和项目管理工具,它的API...
其核心优势在于跨平台性和高性能表现。 **跨平台性**:Flutter 的跨平台特性意味着开发者可以使用同一套代码库来部署应用程序至多个不同的平台。这些平台包括但不限于: - **移动端**:Android 和 iOS。 - **Web端...
### Apache服务器配置与使用知识点详解 #### 一、Apache服务器简介...通过以上知识点的学习,读者可以深入了解Apache服务器的基本原理、配置方法及高级用法,从而更好地利用Apache构建稳定、高效、安全的Web服务环境。
对于高并发的B2C商城,性能优化至关重要,包括缓存策略、负载均衡、CDN内容分发网络等技术的应用,以保证系统的稳定性和响应速度。 11. **API接口**: 商城系统可能需要与其他服务集成,如物流查询、第三方支付、...
**PriorityQueue带优先级的队列** `PriorityQueue`是Java集合框架...理解这些技术并合理选择使用,对于构建高性能、安全的Web应用至关重要。在实际开发中,需要根据应用场景和需求来决定使用哪种机制来管理用户状态。
1. **Gatsby**:Gatsby是一个基于React的开源静态站点生成器,用于快速构建现代Web应用。Gatsby以其出色的性能、丰富的插件生态系统和SEO优化而闻名。在“notebook”项目中,Gatsby被用来构建响应式的博客界面,能够...