← 返回目录

浏览器存储

第 104 / 154 卷日期:

浏览器存储

前端缓存

前端缓存技术方法主要分为http缓存和浏览器缓存。

HTTP缓存:强缓存、协商缓存浏览器缓存:storage 前端数据库和应用缓存

应用缓存主要是通过manifest文件来注册被缓存的静态资源,已经被废弃,因为它的设计有些不合理的地方,在缓存静态文件的同时,会默认缓存html文件。这导致页面的更新只能通过manifest文件中的版本号来决定。所以,应

用缓存只适合那种常年不变化的静态网站。如此不方便,是被废弃的重要原因。

对于一些具有重复性的HTTP请求,比如每次请求得到的数据都是一样的,我们可以把这对[请求-响应]的数据都缓存在本地,下次就直接读取本地数据,不必再通过网络获得服务器的响应了,这样可以大大提升网络性能。

浏览器对服务器最近请求过的资源进行存储,减少与服务器的交互,减少对宽带浪费,减少服务器负担。分为强缓存和协商缓存。

HTTP控制缓存的字段主要包括Cache-Control/Pragma,Expires,Last-Modified/Etag。

本地强缓存如果过期了,就需要协商缓存,也就是去看服务器上的资源是否修改。

缓存存储

内存缓存:快速读取和实效性硬盘缓存:写入硬盘文件,需要I/O操作,重新解析改缓存内容,读取复杂,速度慢

浏览器中的缓存位置一共有四种,按优先级从高到低排列分别是:

Service Worker Memory Cache

Disk Cache Push Cache

大的JS、CSS文件直接丢进磁盘,反之丢进内存

内存使用率高时,文件优先进入磁盘

调用 Cookie 时,由于可校验 Cookie 的有效期,以及发送方的域、路径、协议等信息,所以正规发布的 Cookie 内的数据不会因来自其他Web 站点和攻击者的攻击而泄露

Set-Cookie

当服务器准备开始管理客户端的状态时,会事先告知各种信息。

Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31 GMT; path

cookie字段

name = value 如果用于保存用户登录态,赋值 cookie 的名称和值expires=datecookie有效期path=path将服

expires

指定 Cookie 的有效期。省略 expires 属性时,其有效期仅限于维持浏览器会话(Session)时间段内

domain

表示cookie作用域

比如,当指定 .example.com 后,除 .example.com 以外, www.example.com或 www2.example.com等子域名都可以访问Cookie

secure

限制 Web 页面仅在 HTTPS 安全连接时,才可以发送 Cookie

Set-Cookie: name=value; secure

以上例子仅当在https://www.example.com/(HTTPS)安全连接的情况下才会进行Cookie 的回收

当省略 secure 属性时,不论 HTTP还是 HTTPS,都会对 Cookie 进行回收

HttpOnly

禁止JS脚本访问 Cookie

Set-Cookie: name=value; HttpOnly

使用 JavaScript 的 document.cookie 无法读取Cookie的内容。因此,也就无法在 XSS 中利用 JavaScript 劫持 Cookie

SameSite

是否允许跨域时携带Cookie

strict:任何情况都不允许作为第三方cookie

Lax:宽松模式,只能在请求方法为Get且请求改变了当前页面或打开新的页面时,允许cookie跨域访问

None:默认模式,请求自动携带cookie

Cookie 请求首部字段

告知服务器,当客户端想获得 HTTP状态管理支持时,就会在请求中包含从服务器接收到的 Cookie。接收到多个 Cookie 时,同样可以以多个 Cookie形式发送。

Cookie: status=enable

禁止js访问cookie

设置HttpOnly

JS Document.cookieAPI 无法访问cookie

JS设置cookie

document.cookie 属性来创建、读取、及删除 cookie

全站分卷索引 · 154 卷
  1. 1代码随想录知识星球精华(最强八股文)第五版(前端篇))
  2. 2html语义化
  3. 3src 和 href 的区别
  4. 4link 与 @import 的区别
  5. 5iframe
  6. 6CSS
  7. 7伪元素和伪类
  8. 8block,inline,inline-block
  9. 9重排、重绘和合成
  10. 10盒子模型
  11. 11margin 合并
  12. 12margin和padding 的值为百分比时
  13. 13浮动
  14. 14定位
  15. 15CSS选择器
  16. 16CSS选择器优先级
  17. 17选择器权重Specificity
  18. 18CSS属性继承
  19. 19不可/可继承属性
  20. 20display: none与 visibility: hidden的区别
  21. 21background-size
  22. 22client、offset&scroll
  23. 23CSS3新特性
  24. 24flex布局
  25. 25常见布局
  26. 26三栏布局
  27. 27垂直居中
  28. 28水平垂直居中
  29. 29CSS画三角形
  30. 30使chrome支持12px以下文字
  31. 31响应式布局
  32. 32媒体查询
  33. 33过渡与动画
  34. 34JavaScript 动画 和 CSS动画
  35. 35SCSS
  36. 36CSS性能优化
  37. 37有哪些数据类型
  38. 38判断数据类型
  39. 39类型转换
  40. 40parseInt&parseFloat
  41. 41浮点数求和步骤
  42. 42十进制小数转二进制
  43. 430.1+0.2 为什么不等于 0.3
  44. 44undefined 和 undeclared 的区别
  45. 45JavaScript NaN 属性
  46. 46isFinite()&isNaN()
  47. 47数组
  48. 48对原数组有影响
  49. 49对原数组无影响
  50. 50数组去重
  51. 51数组拍平
  52. 52ES6新增的数组方法
  53. 53判断是否存在某个值
  54. 54arguments为啥不是数组
  55. 55对象
  56. 56遍历对象的方法
  57. 57判断对象是否具有属性
  58. 58for in 和 for of 的区别
  59. 59继承方式
  60. 60instanceof
  61. 61深浅拷贝
  62. 62freeze属性
  63. 63函数
  64. 64函数柯里化
  65. 65函数的 length
  66. 66箭头函数和普通函数区别
  67. 67构造函数
  68. 68执行上下文
  69. 69作用域
  70. 70作用域和作用域链
  71. 71闭包和内存泄漏
  72. 72this
  73. 73关于 this 的指向问题
  74. 74改变this指向的方法(bind / call / apply)
  75. 75字符串
  76. 76DOM和事件
  77. 77哪些事件支持冒泡
  78. 78阻止冒泡
  79. 79HTMLCollection、NodeList
  80. 80dom.onclick 和 dom.addEventListener的区别
  81. 81e.target和e.currentTarget
  82. 82页面生命周期
  83. 83异步
  84. 84内存管理GC
  85. 85其它
  86. 86JavaScript 中日期时间格式转换
  87. 87input和object实现双向绑定
  88. 88JSON.stringify()
  89. 89escape、encodeURI&encodeURIComponent
  90. 90移动端滚动穿透和溢出
  91. 91ES6
  92. 92Map字典
  93. 93... 与rest
  94. 94proxy
  95. 95模块化
  96. 96Ajax、Fetch和Axios
  97. 97Webpack
  98. 98浏览器:事件循环
  99. 99浏览器内核
  100. 100浏览器同源策略
  101. 101输入URL回车后发生了什么
  102. 102HTTP
  103. 103HTTP 2.0
  104. 104浏览器存储
  105. 105鉴权
  106. 106Webstorage
  107. 107浏览器执行机制
  108. 108AST 抽象语法树
  109. 109性能优化
  110. 110CSS
  111. 111网络相关
  112. 112使用HTTP2.0
  113. 113图片
  114. 114CDN图片
  115. 115其他文件优化
  116. 116降低APP首页开屏渲染时间
  117. 117页面白屏
  118. 118HTTPS中间人攻击
  119. 119Web Worker
  120. 120Service Worker
  121. 121微前端
  122. 122Vue
  123. 123v-show 和 v-if 的区别
  124. 124双向数据绑定的原理
  125. 125Vue中的插槽使用
  126. 126Vue中的key
  127. 127Vue过滤器
  128. 128Vue中Scoped原理
  129. 129Vue中$nextTick的使用
  130. 130Vue中实现组件通信的方式
  131. 131Vue-router
  132. 132Vue路由传参
  133. 133前端路由
  134. 134Vuex
  135. 135虚拟DOM
  136. 136DIFF 算法
  137. 137Vue3和Vue2有哪些区别
  138. 138说一说你对React的理解
  139. 139React事件机制
  140. 140说一说你对react refs的理解
  141. 141react中key的作用
  142. 142组件开发
  143. 143有状态组件和无状态组件
  144. 144函数式组件和类组件的区别
  145. 145PureComponent&Component
  146. 146常见 Hooks
  147. 147状态管理
  148. 148redux toolkit
  149. 149React18新特性
  150. 150client中的createRoot取代以前的ReactDOM.render
  151. 151Suspense
  152. 152新的Hooks
  153. 153VDom一定更快吗
  154. 154Fiber