浏览器缓存

缓存:为了提高访问网页的速度,浏览器会采用累积加速的方法,将你曾经访问的网页内容(包括图片以及cookie文件等)存放在电脑里,这个存放空间,我们就称它的浏览器缓存,以后我们每次访问网站时,浏览器会首先搜索这个目录,如果其中已经有访问过的内容,那浏览器就不必从网上下载,而直接从缓存中调出来,从而提高了访问网站的速度。

如何生存缓存:

缓存协商:缓存内容在本地,内容由web服务器生成,因此要建立一种机制即为http中的“缓存协商“(web服务器和缓存之间的一种沟通机制)

Last-ModifiedIf-Modified-Since协商

Last-ModifiedIf-Modified-Since分别位于响应头信息的请求头信息中,都是记录请求的页面最后的修改时间。

在第一次访问Web服务器会返回200状态,并在浏览器的响应头Last-Modified上写上此页面最后修改的时间戳

在再次访问时,浏览器会把第一次返回last-Modified的时间戳记录到If-Modified_since,并作为请求头信息发送到服务器区,web服务器会通过If-Modified-since上的时间戳来判断用户的页面是否是最新的,如果不是最新的,则返回新的页面并修改响应头Last-Modified时间戳给用户,如果判断是最新的,则返回304状态并告诉浏览器本地的cache页面是最新的,浏览器可以直接加载本地页面,这样可以减少网络上传输的数据,并且也减少服务器的负担。

注意:Http协议规定使用的是GMT时间,而我们国家使用的是GMT+8的时间。

如上图所示:用户请求所需文件,对比该文件当前的最后修改时间,如果时间一致则利用已有缓存。

2Etag协商

如果我们的一个文件放在多台web服务器上,用户的请求在这些服务器上之间轮询,实现负载均衡,那么这个文件在各台web服务器的最后修改时间很可能是不一样,这样用户每次请求到的web服务器都可能是不同,Last-ModifiedIf-Modified-since则无法对应,导致每次都需要重新获取内容,这时候采用直接标记内容的etag算法,就可以避免上述的问题

3Expires(缓存过期前不会再发送请求)

Expires标记告诉浏览器该页面何时过期,并且此过期前不需要再访问web服务器,直接使用本地的缓存文件即可,这样请求响应头都不需要,确实节省了带宽和服务器的开销,但是就算页面在web服务器上更新后在expire过期前了不会出现在用户面前

Expires 表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的效果。但是如果同时存在,则被Cache-Controlmax-age覆盖。

Last-Modified,Etag,Expire 混合

通常 Last-Modified,Etag,Expire 是一起混合使用的,特别是 Last-Modified 和 Expire 经常一起使用,因为 Expire 可以让浏览器完全不发起 Http 请求,而当浏览器强制 F5 的时候又有 Last-Modified ,这样就很好的达到了浏览器段缓存的效果。

Etag 和 Expire 一起使用时,先判断 Expire ,如果已经过期,再发起 Http 请求,如果 Etag 也过期,则返回 200 响应。如果 Etag 没有过期则返回 304 响应。

Last-Modified,Etag,Expires 三个同时使用时。先判断 Expire ,然后发送 Http 请求,服务器先判断 last-modified ,再判断 Etag ,必须都没有过期,才能返回 304 响应。

Cache-control用于控制HTTP缓存

数据包中的格式:

Cache-Control:cache-directive

Cache-directive可以为以下:

Request时用到:

| "no-cache"  ::指示请求或响应消息不能缓存

根据什么能被缓存:

| "no-store" :用于防止重要的信息被无意的发布,在请求消息中发送将使得请求和响应消息都不使用缓存。

根据缓存超时:

| "max-age" "=" delta-seconds   :指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应

| "max-stale" [ "=" delta-seconds ]    :指示客户机可以接收超出超时期间的响应消息,如果指定max-stale消息的值,那么 客户机可以接收超出超时期指定值之内的响应消息。

| "min-fresh" "=" delta-seconds :指示客户机可以接收时间小于当前时间加上指定时间的响应

| "no-transform"

| "only-if-cached"

| "cache-extension"

response时用到:

是否可缓存分为:

| "public"     :指示响应可被任何缓存缓存

| "private" [ "=" <"> field-name <"> ]   :对于单个用户的整个或部分响应消息,不能被共享缓存处理,这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。

| "no-cache" [ "=" <"> field-name <"> ]   

| "no-store"  :

| "no-transform"  :

| "must-revalidate"

| "proxy-revalidate"

| "max-age" "=" delta-seconds    

| "s-maxage" "=" delta-seconds

| "cache-extension"

Cookie:

什么是cookie

cookie是一小段文本信息,伴随着用户请求和页面在web服务器和浏览器之间传递。

Cookie包含每次用户访问站点时web应用程序都可以读取的信息。

为什么需要cookieCookie是一种在客户端保持HTTP状态信息的技术

因为HTTP协议是无状态的,对于一个浏览器发出的多次请求,web服务器无法区分,是不是来源于同一个浏览器。所以需要额外的数据用于维护会话。Cookie正是这样的一段随HTTP请求一起被传递的额外数据。

Cookie的限制

大多数浏览器支持最大为4096字节的cookie.由于这限制了cookie的大小 ,最好用cookie来存储少量数据,或者存储用户ID之类的标识符。用户ID随后便可用于标识用户,以及从数据库或其他数据源中读取用户信息。浏览器还限制问点可以在用户计算机上存储的cookie的数量。大多数浏览器只允许每个站点存储20cookie;如果试图存储更多 cookie,则最旧的cookie便会被丢弃。有些浏览器还会将接受的来自所有 站点的cookie总数作出绝对限制,通常为30个。

Cookie是一种在客户端保持HTTP状态信息的技术Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务器传送给各个客户端的数据是可以各不相同的。

浏览器可以决定是否保存这片数据,一旦WEB浏览器保存了这片数据,那么它在后每次访问该WEB服务器时,都应在HTTP请求头中奖这片数据回传给WEB服务器。

显然,COOKIE最先是同WEB服务器发出的,是否发送Cookie的具体内容,完全是由WEB服务器决定的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值