http缓存机制详解

强制缓存:没缓存数据时,浏览器向服务器请求数据时,服务器会将数据和缓存规则一并返回,缓存规则信息包含在响应header中

响应头字段:

  • Expires 服务器端返回的到期时间,下一次请求时,请求时间小于服务端返回的到期时间,直接使用缓存数据
  • Cache-control: private, public, max-age, no-cache, no-store

from memory cache 使用内存中的缓存(一旦进程关闭,进程的内存会清空) 一般js / pictures
from disk cache -> page -> from disk cache -> from memory cache 一般css文件

对比缓存:第一次请求数据,服务器将缓存标识与数据一起返回给客户端(客户端将二者备份至缓存数据库中,再次请求数据时,客户端将备份的缓存标识发送给服务器,服务器根据缓存标识进行判断,判断成功,返回304,表示客户端比较成功,可使用缓存数据)。返回header部分,不返回报文主体部分。

响应头字段:

  • Last-Modified, 对应的请求头If-Modified-Since:Last-modifie服务端响应,告诉浏览器资源最后修改修改时间;If-Modified-Since客户端带上这个头,服务器收到这个头,对比,对比成功,返回304,对比不成功,返回200
  • Etag,对应的请求头If-None-Match:Etag 服务器响应请求时,生成浏览器当前资源在server的唯一标识,nginx1.3自动开启;If-None-Match client带上这个头请求server,对比,如果成功返回304,如果不成功,返回200。

总结:

强制缓存和对比缓存同时设置,点刷新,走304,ctrl+f5,走200,普通访问:cache-control生效;如果只设置cache-control,不设置last-modified,手动刷新都是200,报文比较大。

强制缓存
对比缓存
总结
其他

js 的与和或

在js中写出如下的答案 :

var a = 2;

var b = 3;

var andflag = a && b ;

var orflag = a || b;

问andflag 和orflag 分别是什么?

起初我认为: andflag 和orflag 的值都为 true; 毕竟 && 和 || 都是求Boolean ,后来发现,我错了。

答案应该是  andflag  = 3,orflag = 2;

原因是这样的:

在运算过程中,首先js  会将 && 和||  两边的值转成Boolean 类型,然后再算值 ,&&运算如果返回true,则取后面的值,如果|| 返回true,则取前面的值 , 而其中数值转换成boolean 的规则 是:

对象、非零整数、非空字符串返回true,

其它为false   ;

a && b  的运算就是  :因为  a  和  b全是非零整数,所以  a  和  b  也就是true ,而   true && true  返回   true   ,则取后面的b   ,同理  a 和b 全是非零整数,a  和b  全是true  ,则true || true  返回   true ,取|| 前面的值 也就是2;

同样:该逻辑运算符支持短路原则:

如 var  a = “”  ||  null  || 3  ||  4   —->    var a = fasel || false || true ||  true  结果为true  则返回第一个true,即是3
var b = 4 && 5 && null && 0   ——>   var b = true && true && false && false   结果是false   则返回第一个false   即是null .

js apply和call 使用详解

apply()第一个参数是调用apply的函数运行的作用域,第二个参数可以是Array,也可以是arguments对象

call()第一个参数是this的值没有变化,而其余参数都直接传递给函数(也就是逐一列举出来)


如果要传入的是数组或arguments对象,apply会更方便。

apply和call区别在于传递参数的形式不一样,call要逐一传,且不支持arguments对象传入。

apply和call都是立即执行。