概述

最近对http很感兴趣,于是开始看《http权威指南》。别人都说这本书有点老了,而且内容太多。我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做,还告诉你为什么这么做。于是我把学到的知识点记录下来,供以后开发时参考,相信对其他人也有用。

缓存

1.缓存有以下优点:

  • 减少了冗余的数据传输,节省了你的网络费用。
  • 缓解了网络瓶颈的问题,不需要更多的带宽就能够更快的加载页面。
  • 降低了对原始服务器的要求,服务器可以更快地响应,避免过载的出现。
  • 降低了距离时延,因为从较远的地方加载页面会更慢一些。

2.可以用已有的副本为某些到达缓存的请求提供服务,这被称为缓存命中;其它一些到达缓存的请求可能会由于没有副本可用,而被转发给原始服务器,这被称为缓存未命中。原始服务器的内容可能会发生变化,缓存要不时对其进行检测,看看它们保存的副本是否仍是服务器上最新的副本。

3.缓存对缓存的副本进行再验证时,会向原始服务器发送一个小的再验证请求,如果内容没有变化,服务器会以一个小的304 Not Modified进行相应。只要缓存知道副本仍然有效,就会再次将副本标识为暂时新鲜的,并将副本提供给客户端,这被称为再验证命中缓存命中

4.由于文档并不全是同一尺寸的,所以文档命中率并不能说明一切。有些大型对象被访问的次数可能较少,但由于尺寸的原因,对整个数据流量的贡献却更大,因此有些人更愿意使用字节命中率作为度量值。

5.客户端有一种方法来判断响应是否来自缓存,就是使用Date首部。将响应中Date首部的值与当前时间进行比较,如果响应中的日期值比较早,客户端通常就可以认为这是一条缓存的响应。

6.私有缓存是单个用户专用的,通常内建在web浏览器中;公有缓存是特殊的共享代理服务器。

7.在实际中,缓存实现了层次化。在较小缓存中未命中的请求会被导向较大的父缓存。有些网络会构建复杂的网状缓存,这种代理缓存会决定选择何种路由对内容进行访问、管理和传送,因此可将其称为内容路由器

8.缓存的处理步骤

  1. 接收,从网络中读取抵达的请求报文。
  2. 解析,对报文进行解析,提取出URL和各种首部。
  3. 查询,查看是否有本地副本可用,如果没有,就获取一份副本。
  4. 新鲜度检测,查看已缓存的副本是否足够新鲜,如果不是就询问服务器是否有更新。
  5. 创建响应,用新的首部和已缓存的主体来构建一条响应。
  6. 发送,通过网络将响应发送给客户端。
  7. 日志,可选地创建一个日志文件。

9.缓存不应该调整Date首部,Date首部表示的是原始服务器最初产生这个对象的日期。

10.文档过期:通过http/1.0+的Expires首部和http/1.1的Cache-Control:max-age首部,http让原始服务器向每个文档加了一个过期时间。

11.仅仅是已缓存文档过期了并不意味着它和原始服务器上的文档有什么不同。所以在过期的时候需要服务器再验证,询问原始服务器文档是否发生了变化。

12.所有以“If-”开头的条件首部,都是缓存再验证条件首部。其中最重要的是If-Modified-Since和If-None-Match。

13.有时,服务器希望在对文档进行一些非实质性或不重要的修改时,不要使所有的已缓存副本都失效。HTTP/1.1支持弱验证器,如果只对内容有少量修改,就允许服务器声明那是足够好的等价体。服务器会用前缀“W/”来标识弱验证器。比如:ETAG:W/"v2.6"或者If-None-Match: W/"v2.6"

14.Cache-Conrol:no-store会禁止缓存;Cache-Conrol:no-cache表示可以缓存,但是每次使用缓存前需要进行新鲜度再验证

15.Refresh按钮会发布一个附加了Cache-Control请求首部的GET请求,这个请求会强制进行再验证,或者无条件从服务器获取文档。

16.文档过期系统并不是一个完美的系统,如果发布者不小心分配了一个很久之后的过期日期,那么在文档过期之前,它要对文档所做的所有修改都不会出现在任何缓存中。因此,很多发布者甚至都不使用过期日期。

17.发布广告者的两难处境,虽然缓存有利于更快的显示,但是很多内容提供商的收益都是通过广告实现的,每向用户显示一次广告内容,内容提供商就会获得相应的收益。这就是缓存的问题,如果缓存做的很好,原始服务器根本收不到任何HTTP访问,因为这些访问都被因特网缓存吸收了。所以一般内容提供商都会在内容上加上no-cache首部,让用户每次访问时都与服务器进行再验证。

《http权威指南》读书笔记7的更多相关文章

  1. HTTP权威指南读书笔记

    HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...

  2. css权威指南读书笔记

    今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[cla ...

  3. 经典的性能优化最佳实践 web性能权威指南 读书笔记

    web性能权威指南 page 203 经典的性能优化最佳实践 无论什么网络,也不管所用网络协议是什么版本,所有应用都应该致力于消除或减 少不必要的网络延迟,将需要传输的数据压缩至最少.这两条标准是经典 ...

  4. css权威指南读书笔记-第10章浮动和定位

    这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮 ...

  5. Hadoop权威指南读书笔记

    本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系 ...

  6. JavaScript权威指南读书笔记

    JavaScript 1.变量 变量是一个表示值的符号,是一个名字,他的本质是值: var x; //----声明一个变量: 值通过等号“=”赋给变量,x = 16; 对象是名/值对的集合,或字符串到 ...

  7. Java性能优化权威指南-读书笔记(五)-JVM性能调优-吞吐量

    吞吐量是指,应用程序的TPS: 每秒多少次事务,QPS: 每秒多少次查询等性能指标. 吞吐量调优就是减少垃圾收集器消耗的CPU周期数,从而将更多的CPU周期用于执行应用程序. CMS吞吐调优 CMS包 ...

  8. Java性能优化权威指南-读书笔记(四)-JVM性能调优-延迟

    延迟指服务器处理一个请求所花费的时间,单位一般是ms.s. 本文主要讲降低延迟可以做的服务器端JVM优化. JVM延迟优化 新生代 新生代大小决定了应用平均延迟 如果平均Minor GC持续时间大于应 ...

  9. Java性能优化权威指南-读书笔记(三)-JVM性能调优-内存占用

    新生代.老年代.永久代的概念不多说,这三个空间中任何一个不能满足内存分配请求时,就会发生垃圾收集. 新生代不满足内存分配请求时,发生Minor GC,老年代.永久代不满足内存分配请求时,发生Full ...

  10. Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述

    概述:JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少.而是要根据实际的应用程序的系统需求,实际的活跃内存等确定.正文: JVM调优工作流程 整个调优过程是不断重复的一个迭代, ...

随机推荐

  1. UNIX 系统下退出 git commit 编辑器

    如果是 Emacs 编辑器,输入 Ctrl X + Ctrl S(保存),再输入Ctrl X + Ctrl C(退出) 如果是VIM编辑器,输入 ESC + :wq UNIX 系统默认打开的是 Ema ...

  2. Vue中观察者模式的实现

    Vue中实现观察者模式的方法可以有三种: 1.v-on方法 exp: <div id='test'> <button v-on:event='functionName'>but ...

  3. hashmap源码研究

    概述 在官方文档中是这样描述HashMap的: Hash table based implementation of the Map interface. This implementation pr ...

  4. testXSS <img src="aa" onerror="javascript:alert('XSS');"/>

    adsa  </p><img src="aa" onerror="javascript:alert('XSS');"/><p> ...

  5. identityserver4 代码系列

    链接:https://pan.baidu.com/s/1ePLwUxGpIPObwA8nnfDT9w 提取码:gr0x

  6. 使用SpringBoot搭建一个简单的web工程

    最近在学习SpringBoot,想写在博客园上记录一下,如有错误之处还望指出. 首先创建一个maven工程,不用勾选骨架. 在pom.xml文件中添加如下内容,使工程变成Springboot应用. & ...

  7. python3 第三十三章 - 标准库概览Part II

    第二部分提供了更高级的模块用来支持专业编程的需要.这些模块很少出现在小型的脚本里. 1. 输出格式化reprlib 模块提供了一个用来缩写显示大型或深层嵌套容器的 定制版repr() . >&g ...

  8. Linux中硬链接和软链接的区别

    看了这篇文章之后,豁然开朗.直接放链接,感谢作者的分享. https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/#ico ...

  9. Spring Boot中使用Lombok消除POJO类模板代码

    首先,要让IDE支持Lombok,这里以idea为例进行介绍. 点击项目的“File”-—>"settings"—>"Plugins",在marke ...

  10. 学习Acegi应用到实际项目中(7)- 缓存用户信息

    在默认情况下,即在用户未提供自身配置文件ehcache.xml或ehcache-failsafe.xml时,EhCache会依据其自身Jar存档包含的ehcache-failsafe.xml文件所定制 ...