待归档
https://www.youtube.com/playlist?list=PLanS_SVm5swimC_m5zWfly0EPJTk7Tsp8 - youtube jsi
https://mp.weixin.qq.com/s/TAyaDRn7gQlk6GOm_WKTHw 这Proxy能干啥
https://mp.weixin.qq.com/s/27o3nUW_sovmmS5KlmXwMg React 的 Suspense 和 ErrorBoundary 还有这种关系
https://mp.weixin.qq.com/s/GbSNPeDhllfsSP6y1LIdNg ES12都增加了哪些新特性
https://mp.weixin.qq.com/s/SvpQtzZNfzIrORCIlYflmw CSS 伪元素
https://mp.weixin.qq.com/s/LI7D3ZUrC385p5LMfR3ouQ 预渲染
https://mp.weixin.qq.com/s/bF6pDnhmK7NJwfUmo7CAZA JS 发起的请求可以暂停吗?
https://mp.weixin.qq.com/s/6mlv6_ClRTW36cgdBiY9Cw curl 上手指南,前端实用工具
https://mp.weixin.qq.com/s/GekGovHyuaY0Bpi4BA6RPw 重复的 eslint
https://mp.weixin.qq.com/s/lHYkY-BOnxl8URY6-o57FA "代码拆分"+"预加载"
https://mp.weixin.qq.com/s/kdpE-zW1ByssMGnQJawsUA 本地存储方案
https://mp.weixin.qq.com/s/L381U-XszdhV-L3Is5fGog 浏览器也拥有了原生的 “时间切片” 能力
https://mp.weixin.qq.com/s/MbLFyGZyTzRUKUacoG70Gg 前端工程化到底是啥
https://mp.weixin.qq.com/s/JwyXcyB6o04fiQtlM3V16A module.exports和exports,应该用哪个
https://mp.weixin.qq.com/s/ET0GpYungWyfEteIA2zvLQ
https://mp.weixin.qq.com/s/0wevn5cZ6J4jNmmO-ZspGw
https://mp.weixin.qq.com/s/-rNjZnRvrJ4uR0HTR4jikw
https://mp.weixin.qq.com/s/MYbdZ6gqWaRSSaDhtR0GWA
https://mp.weixin.qq.com/s/7hT8oyK1m21tQcxbruQYbA
https://mp.weixin.qq.com/s/qH9I4hsY9hwPSqYRk_vYiA
https://mp.weixin.qq.com/s/cJPv0niRXhEFqv4-KN5GBw
https://mp.weixin.qq.com/s/2QSNcyScehZlHQbdA0Aurg
https://mp.weixin.qq.com/s/s0xTsa_jUmkIeKcEoM5B8w
https://mp.weixin.qq.com/s/J9IEJAKutu1ujJWSjnXeFg
https://mp.weixin.qq.com/s/IjsaFKKAfiqKbNb7z5bWNg
https://mp.weixin.qq.com/s/SUmvTan2uOJcVVRnPYwmqA
https://mp.weixin.qq.com/s/SakGTNlckP9vVh49KwRNHw
https://mp.weixin.qq.com/s/OAM_npB2e1qs7UCUCtCzsg
https://mp.weixin.qq.com/s/c74eiXhuEWBpjiRUtKmbEA
https://mp.weixin.qq.com/s/FR_ZMc6flFV-7o2XAmpW6Q
https://mp.weixin.qq.com/s/M0Xt2upAM8-Eb4en7Z2kUw
https://mp.weixin.qq.com/s/MYxAjzY3IrLnMkGh515AkQ
https://mp.weixin.qq.com/s/_WkA1Ta_2LSx8PAXUu1cKA
https://mp.weixin.qq.com/s/oefFOVf1H0La6mOMIfUMUg
https://mp.weixin.qq.com/s/zLFIh_RhjTb7PY2_d3VRGw
https://mp.weixin.qq.com/s/TvFI7otbHIbADEH-qY2mAQ
https://mp.weixin.qq.com/s/U4j9EuHJlHApII6_fzMrHw
https://mp.weixin.qq.com/s/99ZDsxm553Dac48RUoj4BQ
https://mp.weixin.qq.com/s/v2wsNSiSRT7_fic9NStzXA
https://mp.weixin.qq.com/s/hrqFVWh1AAd3TEMk_JQtNA
https://mp.weixin.qq.com/s/iDuEdt6Ut5TZ4iHt1Q2BrA
https://mp.weixin.qq.com/s/SqHTWwbepjjZ42jNi1-uGw
https://mp.weixin.qq.com/s/CBXN6udTy9MjpNecxEAVtQ
https://mp.weixin.qq.com/s/6nEByptTolvkSGWhten3Tw
https://mp.weixin.qq.com/s/I6nGwXTPtl-jy2t0cVQ_4A
https://mp.weixin.qq.com/s/AwkbekrWFQTsGB9wXdFBGw
https://mp.weixin.qq.com/s/j_yrBI_AvZyP6QAB7YKTvQ
https://mp.weixin.qq.com/s/Ylv4mFApxxcyJHFl7OpdLA
https://mp.weixin.qq.com/s/gafFKEDrk6gqCSFYDujSkQ
https://mp.weixin.qq.com/s/zcipIsZvw3XEQLAyi4Kifg
https://mp.weixin.qq.com/s/lzE7WiKNDADlpcmRjrsfYA
https://mp.weixin.qq.com/s/IvvCYfFjuOCAC9ts_jSK_g
https://mp.weixin.qq.com/s/MwSSF8QjITJanUfAM8Z_BA
https://mp.weixin.qq.com/s/y3pVJpM-Bpg5VykEyjj-LQ
https://mp.weixin.qq.com/s/iWbyn6FhilwIPGYeGC3LkQ
https://mp.weixin.qq.com/s/dbUR2zg0qA0lV0CsGwk-ag
https://mp.weixin.qq.com/s/0MwZoBbzr64Yg-v_vR3BwQ
https://mp.weixin.qq.com/s/0bzsHVqxoyl9uth3iymp0A
https://mp.weixin.qq.com/s/WgtaO-P9spM0IZfU1JtJTQ
https://mp.weixin.qq.com/s/MrX6P4LEIJL5kZdV0bK26g
https://mp.weixin.qq.com/s/K3WFuPHH7nKR1c3pycr7MQ
https://mp.weixin.qq.com/s/y8FXNDFQ_K6FF5Ne9IOjpg
https://mp.weixin.qq.com/s/yhZ2qYWDa96zejOHFqvMwQ
https://mp.weixin.qq.com/s/ZvjWusFwRo096K9Bc89bxA
https://mp.weixin.qq.com/s/jaX5aVPrHxv75soFbnfq5A
https://mp.weixin.qq.com/s/s4mGvONAs-2BhPEcUOI7Wg
https://mp.weixin.qq.com/s/HmWOGaimis0yu884LhoZMQ
https://mp.weixin.qq.com/s/m9vtDyodB6gszH3xD70HTQ
https://mp.weixin.qq.com/s/G4rJkjIVkIbSMrCtA4hHDA
https://mp.weixin.qq.com/s/KhuoP31HYpzcngcKY9MhpA
https://mp.weixin.qq.com/s/McE8DcyapQgHQDNamoF7gQ
https://mp.weixin.qq.com/s/aF7nrGOlaxNryJX0ts7pmw
https://mp.weixin.qq.com/s/mGA654VziYVKkKZZF2R8yA
https://mp.weixin.qq.com/s/1j35I48ZyqR5bWAzOdWJcQ
https://mp.weixin.qq.com/s/mbWMaZ2PHJe0HEr9YWDTrQ
https://mp.weixin.qq.com/s/wwK0vf3mjzuq_nDTSwRciw
https://mp.weixin.qq.com/s/XMtCUBdNhpIjZZduXJuZtg
https://mp.weixin.qq.com/s/hLTnbRItiaNwX_1sCIxPJA
https://mp.weixin.qq.com/s/w_kr399RQUfFH2JVrvT_3w
https://mp.weixin.qq.com/s/R9tRwHk9erUypyo3xAfumA
https://mp.weixin.qq.com/s/2ON_7DWO9Dy8jbTcQlgZwA
https://mp.weixin.qq.com/s/c0pYoLaFsUR44l6TsZAZlQ
https://mp.weixin.qq.com/s/a-qqUzyClY9Binwsk2-Ltw
https://mp.weixin.qq.com/s/JKyTE4g6U7LMe-rRxZW1fg
https://mp.weixin.qq.com/s/Q1V9qBAx-nJcIvgNogZmbw
https://mp.weixin.qq.com/s/oAg7ElPQ4n1oQmorWyR9Rw
https://mp.weixin.qq.com/s/83xBrZc1oz4vRxClz0789Q
https://mp.weixin.qq.com/s/xowqcPvZ9TgBbIa6qgz41A
https://mp.weixin.qq.com/s/6CBI3GcPQVi9WQRhII384w
https://mp.weixin.qq.com/s/pdvkq2Y4b9JwJxWR3gKpxw
https://mp.weixin.qq.com/s/CZAWkARhvvoMa2Zk8Uv2Lg
https://mp.weixin.qq.com/s/ob06V6ChPwOFUqabQSPv5A
https://mp.weixin.qq.com/s/L3WWPQPCxwCcOHGL9P-4zg
https://mp.weixin.qq.com/s/oDR7AAHXSgackL2IR6pUFw
https://mp.weixin.qq.com/s/8c-NGNhCHbYVlQNd2Fxy-Q
https://mp.weixin.qq.com/s/hhrCgCDPmzm_CHLHEYh7bw
https://mp.weixin.qq.com/s/5ImT54MaPon8S0XPe1KXcw
https://mp.weixin.qq.com/s/SiULe7HVNbvxaa0LtlITPg
https://mp.weixin.qq.com/s/kqWijzNHuiTZ4FD2WKRF5Q
https://mp.weixin.qq.com/s/e3haMV9nMvxWCTCGCvuHdg
https://mp.weixin.qq.com/s/Il2th79CYuRQIPJtHItZKA
https://mp.weixin.qq.com/s/QeWrIxROU5dQ6tChnQM6SA
https://mp.weixin.qq.com/s/J2cPSPVDDyR9nJ2AdazF7Q
https://mp.weixin.qq.com/s/AYfHnorRQf94bQxm-uOhgw
https://mp.weixin.qq.com/s/GB9-j9rDK6k_zDosiIMLyA
https://mp.weixin.qq.com/s/MetC4UWf3Zmj1wAAv6_yAw
https://mp.weixin.qq.com/s/4kkjju0NAVaUl9tWFddGPQ
https://mp.weixin.qq.com/s/dDLy1PH8ga30k8728ixICQ
https://mp.weixin.qq.com/s/aGQ-mN9qMEixOCHwNirveQ
https://mp.weixin.qq.com/s/mbxniBFRZbq7wIGaxuzFOA
https://mp.weixin.qq.com/s/6KsYgRV7ajhGv8X6BzJTow
https://mp.weixin.qq.com/s/kuDo7t9EN5O3bHpBp6Gs_g
https://mp.weixin.qq.com/s/OJ6QhI0pL159XbuFVes-TA
https://mp.weixin.qq.com/s/GH_GrE4cRC4tw3yNpJ8zoA
https://mp.weixin.qq.com/s/ZdkIoOZh-6l2epSWheru4w
https://mp.weixin.qq.com/s/1oyOJLy0in5nIj_x0w3A2A
https://mp.weixin.qq.com/s/UhiRC8pHftF0IA-7L3TOIg
https://mp.weixin.qq.com/s/uclQHSFpFBRDU3gp9n9FTw
https://mp.weixin.qq.com/s/j4hvUNL70s93OC3o293gDw
https://mp.weixin.qq.com/s/qZAiTWLKtq0qzc1xSQxCqA
https://mp.weixin.qq.com/s/8xd_Bh-7H77WD-apYodkJw
https://mp.weixin.qq.com/s/25G8QA3Gjf6ZaVgfWhk7cA
https://mp.weixin.qq.com/s/B1bbkXqCsU2rZEiyhhuyOg
https://mp.weixin.qq.com/s/TOo59NqAExwXFeUvzQBEXA
https://mp.weixin.qq.com/s/P-s-xdRXVrABMuDTHji7ow
https://mp.weixin.qq.com/s/NOlJv-OahbDYwdJmoTdvDw
https://mp.weixin.qq.com/s/Iw0aNjSzDRRqhUy8yQHdnA
https://mp.weixin.qq.com/s/I5I0P4hEIev4nYT-tcuGug
https://mp.weixin.qq.com/s/35SlY5DjI2C4xAdTwy_nKg
https://mp.weixin.qq.com/s/QaFIfNS5NRFgRZuEc8pdrA
https://mp.weixin.qq.com/s/56QLZx-aJsIpZvzn4qnkRA
https://mp.weixin.qq.com/s/LzOWUkx66qPYCiNLYBrR7w
https://mp.weixin.qq.com/s/pWsntJbJnBip5CbP7HkvFg
https://mp.weixin.qq.com/s/Kbz6FHTimK1FfXCWYl2lhw
https://mp.weixin.qq.com/s/feT6wZ3y9L20mG5NFBHb-Q
https://mp.weixin.qq.com/s/NhZnPdN1eBt7PtEj5m0dIQ
https://mp.weixin.qq.com/s/OBb0zrfGAI6w4ILvT5T5-A
https://mp.weixin.qq.com/s/CjSXdns1URlJ8Yztk0vbtwJavaScript 基础,ES6语法、 script标签 前端模块化整理归档目录 echarts动画实现原理 了解canvas吗 如何实现组件滑动切换效果 对语义化的理解 HTML5有哪些语义化标签 网络通信,重点有浏览器缓存、Http2.0、Https通信过程、TCP与UDP、CDN缓存等。简述下 TLS 握手过程 px转其他单位 vue-router两种模式下如何实现的url到组件的映射 HTML和CSS,这块被问的内容比较少,重点从布局入手,比如单位、盒模型、定位、响应式布局等知识点。
前端框架,框架的底层原理是一定会问的,至少要深入掌握一个前端框架。目前业界内比较流行的框架是 React 和 Vue,React 的知识点有 React diff、生命周期、Fiber 架构、Hooks 等;Vue 的知识点有Vue diff、响应式原理、Vue3.0新特性等。
打包工具,主要围绕Webpack展开,比如loader和plugin原理、webpack构建流程、热更新原理、性能优化等。除此以外,打包界的新宠esbuild也可以了解下。
加分项,除了JavaScript外,还了解哪些编程语言
CSS换行
F12禁止用户复制和查看文本
如何防止网页内容被爬
v8内存管理
v8 unsafe
spa的优缺点
node模块引入的方式 module.export与其他与什么不同
异步加载的方式有哪些
async defer ajax 动态创建script标签 iframe引入 模块引入
cookie sessionStorage localStorage 区别?
生命周期
cookie是直到指定时间,或者当前回话结束
session是到当前会话结束
local是一直有效
大小
cookie是4k
session和local是5M
共享
cookie是同域名共享
session是当前页签下同域名共享
local和cookie一样
JS数据类型有哪些,区别是什么?
string,number,boolean,null,undefined,symbol,bigint,object
你对闭包的理解?
闭包是将函数暴露出去,其中引用的变量就可以被外部访问到
比如模块或者回调函数
promise是什么与使用方法?
跨域是什么?如何解决跨域问题?
说一说BFC
Vuex是什么,每个属性是干嘛的,如何使用 ?
JavaScript有几种方法判断变量的类型?
样式优先级的规则是什么?
引用方式
important》行内》嵌入》外连
顺序
同优先级的后面会覆盖前面
选择器
id>class>tag=::after=prop>后代>子>*>默认
选择器判断规则,首先计算出ABC的个数
- A:id选择器的个数
- B:类,伪类,属性选择器的个数
- C:标签和伪元素的个数
- 重复选择器计算在内,比如 .class.class
- 特殊选择器
- :not() :has() :is() 选括号中最复杂的一个选择器优先级
- :nth() 在上面的规则基础再加一个B
- :where() 优先级是0
- 其他都计算0
CSS权重在一开始是256,后来扩大,可以理解为无法进位,也就是ABC单独比较
JS实现异步的方法?
回调函数、事件监听
promise,生成器,async,await
Vue2.0 双向绑定的原理与缺陷?
Object.defineProperty监听
缺点是一次性递归开销比较大,无法监听对象属性增删,数组下表对应数据改变无法监听
数组去重都有哪些方法?
新建对象,遍历数组赋值,最后转为数组
新建数组,遍历数组,每次判断IndexOf
遍历方法可以使用reduce和filter优化
Set
null 和 undefined 的区别,如何让一个属性变为null
null不是对象,之所以typeof 判断会是object是因为null的二进制都是0,对象是判断前三位是否为0
es6中箭头函数?
没有this,不能new,没有argument,没有原型和super,
this指向(普通函数、箭头函数)?
箭头函数:定义时所在作用域,无法更改
普通:直接调用是全局,对象属性调用是对象,显示绑定就是绑定对象
说几个未知宽高元素水平垂直居中方法
flex,grid
absolute:top:50%;transform:traslateY(-50%)
JS变量提升?
变量在声明前就能使用,var会提升到当前作用域顶,只会提升声明,函数会提示声明与赋值,let和const声明提升后也无法访问,不用var声明a会在执行时提升和赋值,块级作用域内的函数提升会在块级作用域内外各提升一次
**HashRouter 和 HistoryRouter的区别和原理?
hash需要用#区分,history需要用/区分
hash直接部署即可使用,history需要后台配合解析路由
hash原理是监听url的location对象的hash值
history原理是history.pushState做页面跳转
事件循环Event loop,宏任务与微任务?
Vue3.0 实现数据双向绑定的方法 ?
说一下Diff算法?
patch
新节点存在,旧节点不存在,创建新节点
新节点不存在,旧节点存在,删除旧节点
都存在时使用patchVnode对内容比较
patchVnode
- 判断子节点情况
- 新子节点存在,旧的没有,创建新子节点
- 新子节点没有,旧的有,删除旧的
- 新旧都有,进行updateChildren函数对比
updateChildren
- 如果是文本节点,直接更新文本
- 不是文本节点,遍历对比
- 头头对比,尾尾对比,头尾对比,尾头对比,匹配成功则对比其他子节点
- 如果有key,则查找是否有匹配的key
垃圾回收机制
** vue 的 keep-alive**
XSS攻击是什么?
利用用户输入的数据,将恶意数据传输,使用编码过滤可以规避
反射型:诱导用户访问网址,url中拼接了恶意代码,可以插入数据到html或者插入js,css中
存储型:利用评论等表单页面提交恶意代码到服务器,导致服务器和其他用户都有可能被攻击
CSRF攻击是什么?
1 登陆网站A
2 未登出的情况下访问危险网站B
3 危险网站会诱导用户发出网站A的请求,比如发起一个跨域表单请求
可以通过验证码等操作来防护,但是用户体验差
校验referer字段,限制请求来源
使用token校验
js继承的方法和优缺点?
函数都有显式原型对象prototype
,对象都有构造函数construtor
以及隐式原型__proto__
对象可以通过隐式原型访问到构造函数的显式原型对象,以null为顶端
原型链继承:通过修改prototype
直接继承父级的实例,优点是继承了父级的一切原型链上的属性,但是修改属性会影响其他实例
借用构造函数继承:在子构造函数中调用父级的构造函数,这样的话继承的属性修改不会影响其他实例,但是没有继承原型链
寄生式继承、原型式继承:与上面两种类似,但是子类继承的不是实例,而是一个继承父级原型链的空对象
寄生组合式继承:在空对象构造时再调用一次父级构造函数
defer和async区别?
都是异步加载,但是defer会等待页面加载完成后按顺序执行,async会立刻执行
浏览器如何渲染页面的?
解析html,生成dom树和样式树,遇到js会先加载和执行js
html被完成解析完成后。就会加载onload事件
生成渲染树
回流,重绘
构建DOM树
解析html标签属性等,如果文档格式良好,会解析很快
解析过程中遇到图片,css等静态资源,会继续解析,异步加载
遇到js会阻塞解析,预加载扫描器会加速这个过程
css加载不会影响html解析,但是会阻塞js
DOM每次更新时会更新AOM无障碍树
构建CSSOM树
和DOM树类似,但是速度很快,通常少于一次DNS查询所需的时间
JS编译
编译器对脚本进行编译,生成抽象语法树
解析的同时生成作用域
渲染
在解析步骤中创建的DOM树和CSSOM树组合为一个Render树。用于计算元素布局和绘制
布局,回流:第一次计算节点大小与位置叫布局,之后重新计算叫回流或者重排,比如图片加载后会有一次回流
绘制:将布局好的元素框转换为屏幕哈桑的实际像素,绘制在屏幕上
video,canvas,和css3的一些属性会让绘制过程在gpu层执行,能提升性能
合成
绘制会有多个层,所以相互重叠时要进行合成,确保以正确顺序显示
new会发生什么?
创建一个空对象,将对象的隐式原型指向构造函数的显式原型,关联原型链
绑定this指向对象本身
返回对象本身,如果构造函数有返回值时需要判断,是对象则返回,原始类型则返回新对象
浏览器输入URL发生了什么?
浏览器匹配url,查找域名对应ip,DNS解析,TCP连接,网关,防火墙,nginx代理,握手,请求,服务器处理逻辑并返回html,SetCookie,浏览器解析Html,下载静态资源,生成DOM,CSSOM,Render树,开始布局,分层绘制,组合,激活js
组件通信的方式?
props emit
attrs listeners
provoid inject
vuex
eventbus
创建ajax过程
const xhr = new XMLHttpRequest()
xhr.open('post','http://www.xxx.com/api',true)
xhr.setRequestHeader('Content-Type','application/x-www-form')
xhr.send('user=1&sex=male')
xhr.onreadystatechange = ()=>{}
fetch 请求方式?
fetch('http://www.xxx.com/api',{method:'POST',headers:{},body:''})
.then(res=>res.json())
.then(data=>console.log(data))
有什么方法可以保持前后端实时通信?
- 定时轮训:请求数会很多,但实现简单
- 长轮询:等待时间增长,但带宽资源消耗变大
- iframe:能够实时达到,兼容性好,但是长期维持长连接开销增加
- websocket:优点是性能好,实时性好,缺点是兼容性不能保证,不支持断开重连
- SSE:单向推动数据
重绘、重排区别如何避免?
减少改变大小的频率,dom变化尽量一次性完成
尽量使用css3动画,会有gpu优化
创建BFC,独立渲染
Vue 列表为什么加 key
提高diff效率
v-for默认是使用就地复用原则,不会变动dom,而是直接更新元素属性内容,如果有key辅助定位,就可以直接移动dom,不用更新属性
vue-router 实现懒加载的方法?
components:()=>import(/*webpackchunkName:"a"*/../views.A.vue)
前端性能优化手段?
图片压缩、节流防抖,http缓存,本地缓存,keepalive,减少dom变化,ssr服务端渲染,缓存dom,路由懒加载,
性能优化有哪些性能指标,如何量化?
服务端渲染?
优点是减少了网络传输成本,响应快,用户体验好,首屏渲染快,对SEO友好
缺点是开发条件受限,部分生命周期的钩子函数无法使用,部署要求更多,需要Node来运行渲染器,并且对服务器的性能要求更高,因为server会消耗服务器资源
https和http比较,安全在哪里,怎么对数据加密;
他的数据不是明文的,是通过密钥加密的,并且浏览器堆SSL认证网址有标识,不容易被盗版网站引导
流程是浏览器先获取公钥,然后自己生成一个密钥,使用公钥加密,发到服务器,服务器使用私钥解密后得到了客户端密钥,用这个密钥进行会话
http2.0以后雪碧图还有没有意义
从http1.1以后,就默认支持长连接,多个http请求依次共享一个tcp连接,大大减少了请求消耗,但是有请求阻塞
http2.0多路复用更快了,反而应该将大文件拆分为模块,可以更好的提升速度
webpack 常用的配置项
entry output loader plugin
深拷贝
Object.assign可以实现外层深拷贝
JSON可以实现深拷贝,但是不支持undefined和symbol以及内置类型都不能拷贝
递归拷贝
lodash的cloneDeep函数
浏览器缓存
浏览器缓存在进程未关闭时会使用内存缓存,否则是硬盘缓存
没有缓存
浏览器发起请求,检查有没有缓存标识,没有命中缓存,则请求到服务器
服务器返回请求结果与缓存规则
浏览器将请求结果和缓存标识存入到浏览器缓存中
强缓存
浏览器请求缓存,命中缓存并且没失效,则直接使用缓存结果
控制强缓存的字段是expires和cache-control(优先级高),后者时间是相对值
expires:强缓存到期时间
Cache-Control:max-age=xxx 时间 no-cache 协商缓存 no-store 不缓存
协商缓存
具备缓存标识,但是强缓存已过期,会携带缓存标识发起http请求协商缓存
服务器使用缓存标识查看文件是否更新,如果没有更新则返回304,使用缓存,如果更新则返回200,返回浏览器最新的文件
协商缓存的标识有last-modified/if-modified-since 和 etag/if-none-match(优先级高)