HTML5关于缓存和离线存储知识总结

    科技2024-06-21  80

    文章目录

    1 Cookie有哪些优缺点?2. JS操作获取和设置cookie3. cookies ,sessionStorage,localStorage的区别?4. 浏览器的本地存储(Web Storage)5. HTML5应用缓存(Application Cache)和浏览器缓存有何区别?6. HTML5的应用缓存(离线存储)的工作原理7. 浏览器是怎么对HTML5的离线存储资源进行管理和加载的8.如何使cookie隔离(即请求资源时不要让它带上cookie)?

    1 Cookie有哪些优缺点?

    优点:

    1.极高的扩展性和可用性

    通过良好的编程,控制保存在 cookie 中的 session 对象的大小。通过加密和安全传输技术(SSL),减少 cookie 被破解的可能性。只在 cookie 中存放不敏感数据,即使被盗也不会有重大损失。控制 cookie 的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的 cookie。

    缺点:

    1.cookie数量有限制

    IE6 或更低版本最多 20 个 cookieIE7 和之后的版本最后可以有 50 个 cookie。Firefox 最多 50 个 cookiechrome 和 Safari 没有做硬性限制IE 和 Opera 会清理近期最少使用的 cookie,Firefox 会随机清理 cookie。

    2.大小限制

    cookie 的最大大约为 4096 字节,为了兼容性,一般不能超过 4095 字节。

    3.安全性问题

    如果 cookie 被人拦截了,那人就可以取得所有的 session 信息。即使加密也与事无补,因为拦截者并不需要知道 cookie 的意义,他只要原样转发 cookie 就可以达到目的了。

    2. JS操作获取和设置cookie

    1.设置cookies:

    var username=document.cookie.split(";")[0].split("=")[1]; //设置cookies function setCookie(name,value){ var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days*24*60*60*1000); document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); }

    2.获取cookies

    //获取cookies function getCookie(name){ var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)){ return unescape(arr[2]); }else{ return null; } }

    3.删除cookies(设置为过期时间即可)

    //删除cookies function delCookie(name){ var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval=getCookie(name); if(cval!=null){ document.cookie= name + "="+cval+";expires="+exp.toGMTString(); } }

    3. cookies ,sessionStorage,localStorage的区别?

    1.自发传递给服务器

    cookie 是网站为了标示用户身份而储存在用户本地终端上的数据。cookie 数据始终在同源的 http 请求中携带(即使不需要),即会在浏览器和服务器间来回传递。sessionStorage 和 localStorage 不会自动把数据发给服务器,仅在本地保存。

    2.存储大小

    cookie 数据大小不能超过 4k。sessionStorage 和 localStorage 虽然也有存储大小的限制,但比 cookie 大得多,可以达到 5M 或更大。

    3.有效时间

    localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;sessionStorage 数据在当前浏览器窗口关闭后自动删除。cookie 设置的 cookie 过期时间之前一直有效,即使窗口或浏览器关闭

    4. 浏览器的本地存储(Web Storage)

    html5 中的 Web Storage 包括了两种存储方式:sessionStorage 和 localStorage。

    1.localStorage

    适用于长期存储数据,浏览器关闭后数据不丢失。除非主动删除数据,否则数据是永远不会过期的。

    2.sessionStorage

    sessionStorage 不是一种持久化的本地存储,仅仅是会话级别的存储,存储的数据在浏览器关闭后自动删除。

    5. HTML5应用缓存(Application Cache)和浏览器缓存有何区别?

    应用缓存(离线存储):HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。

    区别:

    离线缓存是针对整个应用,浏览器缓存是单个文件。离线缓存断网了还是可以打开页面,浏览器缓存不行。离线缓存可以主动通知浏览器更新资源。

    下面是application cache的扩展内容:

    应用缓存三大优势:

    离线浏览 - 用户可在应用离线时使用它们速度 - 已缓存资源加载得更快减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源

    注意:目前HTML5应用缓存已废弃,取而代之的是service-worker。

    如何实现HTML应用程序缓存(三步):

    创建一个 cache.manifest 文件,并确保文件具有正确的内容。在服务器上设置内容类型。(mime-type:“text/cache-manifest”)所有的 HTML 文件都指向 cache.manifest

    关于manifest文件:

    1.如需启用应用程序缓存,请在文档的 标签中包含 manifest 属性。每个指定了 manifest 的页面在用户对其访问时都会被缓存。如果未指定 manifest 属性,则页面不会被缓存(除非在 manifest 文件中直接指定了该页面)。

    2.manifest 文件的建议的文件扩展名是:".appcache"。

    3.manifest文件可分为三个部分:

    CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

    6. HTML5的应用缓存(离线存储)的工作原理

    工作原理:

    HTML5 的离线存储是基于⼀个新的.appcache ⽂件的缓存机制(不是存储技术),通过这个⽂件上的解析清单离线存储资源,这些资源就会像 cookie ⼀样被存储了下来。之后当⽹络在处于离线状态下时,浏览器会通过被离线存储的数据进⾏⻚⾯展示

    7. 浏览器是怎么对HTML5的离线存储资源进行管理和加载的

    1.在线(连接英特网的情况下)

    浏览器发现 html 头部有 manifest 属性,它会请求 manifest 文件,如果是第一次访问 app,那么浏览器就会根据 manifest 文件的内容下载相应的资源并且进行离线存储。如果已经访问过 app 并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的 manifest 文件与旧的 manifest 文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。

    2.离线:

    浏览器就直接使用离线存储的资源。

    8.如何使cookie隔离(即请求资源时不要让它带上cookie)?

    如果静态资源文件都放在主域名下,那静态文件请求时都会携带 cookie 的数据提交给 server ,这非常浪费带宽,所以需考虑将cookie隔离。

    方法:

    因为 cookie 有同源(域)的限制,因此不能跨域提交请求,故使用非主要域名的时候,请求头中就不会携带 cookie 数据,这样可以降低请求头的大小,降低请求时间,从而达到降低整体请求延时的目的。同时这种方式不会将 cookie 传入服务器,也减少了服务器 对 cookie 的处理分析环节,提高了服务器对 http 请求的解析速度。
    Processed: 0.010, SQL: 8