每日一题 (让我更优秀把!)
1. 强缓存与协商缓存(304状态码是什么)
-
强缓存
- Expires(HTTP/1.0)
即过期时间,存在于服务端返回得响应投中,告诉浏览器在这个过期时间之前可以直接从缓存里面获取数据,无需再次请求。
由于服务起时间可能和浏览器时间不一致,导致服务器返回得国企时间可能不准确,因此这种方式被废弃了。 - Cache-Control(HTTP/1.1)
裁用过期时长来控制缓存,对应字段是max-age。下例子:响应返回后在3600秒,也就是一个小时之内可以直接使用缓存。
Cache-Control:max-age=3600属性 内容 private 只有浏览器能缓存,中间的代理服务器不能缓存 no-cache 跳过当前的强缓存,发送HTTP请求,即直接进入协商缓存阶段 no-store 不进行任何形式的缓存 s-maxage 是针对代理服务器的缓存时间 - Expires(HTTP/1.0)
-
协商缓存
强制缓存失效之后,浏览器在请求头中携带相应的缓存tag向服务器发送请求,由服务器根据这个tag决定是否使用缓存。
- Last-Modified
最后修改时间,在浏览器第一次给服务器发送请求后,服务起会在响应头中加上这个字段。 - ETag
服务器根据当前文件的内容,给文件生成的唯一标识,只要内容有改动,这个值就会变,服务器通过响应头把这个值给浏览器 - 对比
精准度 ETag优于Last-Modified Last-Modified存在缓存失效:1秒内多次改变或者编辑了资源文件但是文件内容没有改变
性能 Last-Modified优于ETag 因为Last-Modified记录的是一个时间点,ETag是根据文件的内容生成的哈希值。
- 状态码
- 1** 信息服务器收到请求,需要请求者继续执行操作
- 100 Continue 继续,客户端应继续请求
- 101 Switching Protocols 切换协议,服务起根据客户端的请求切换协议。只能切换到更高的协议,例如,切换到HTTP的新版本协议
- 2** 请求成功,操作被成功处理
- 200 OK 请求成功,一般用于GET与POST请求
- 201 Created 已创建,请求成功并创建了新得资源
- 202 Accepted 已接受。已接受请求,但未处理完成。
- 203 Non-Authoritative Information 非授权信息,请求成功。但返回的meta信息不在原始的服务器,而是一个副本。
- 204 No Content 无内容。服务成功处理,但是未返回内容,在未更新网页的情况下,可确保浏览器继续显示当前文档。
- 205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可以通过此返回码清除浏览器的表单域。
- 206 Partial Content 部分内容,服务起成功处理了部分GET请求
- 3** 重定向,需要进一步的操作完成请求
- 300 Multiple Choices 多种选择,请求的资源可包括多个位置。相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
- 301 Moved Permanently 永久移动,请求资源被永久的移动到新URL,返回信息会包括新的URL,浏览器会自动定向到新URL。今后任何新的请求都应使用新的URL代替
- 302 Found 临时移动,与301类似,使用GET和POST请求查看
- 303 See Other 查看其它地址,与301类似,使用GET和POST请求查看
- 304 Not Modified 未修改,所请求的资源未修改,服务起返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。
- 305 Use Proxy 使用代理,所有请求的资源必须通过代理访问。
- 306 Unused 已经被废弃的HTTP状态码
- 307 Temporary Redirect 临时重定向。与302类似,使用GET请求重定向。
- 4** 客户端错误,请求包含语法错误或无法完成请求
- 400 Bad Request 客户端请求的语法错误。服务器无法理解。
- 401 Unauthorized 请求要求用户的身份认证
- 402 Payment Required 保留,将来使用
- 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求。
- 404 Not Found 服务起无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置“您所请求的资源无法找到”的个性页面。
- 405 Method Not Allowed 客户端请求中的方法被禁止
- 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
- 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应使用代理进行授权。
- 408 Request Time-out 服务起等待客户端发送的请求时间过长,超时。
- 409 Conflict 服务器完成客户端的PUT请求时可能返回此代码,服务器处理请求时发生了冲突。
- 410 Gone 客户端请求的资源已经不村子啊,410不同于404 如果资源以前有现在被永久删除了可以使用410代码。网站设计人员可通过301代码指定资源的新位置。
- 411 Length Required 服务器无法处理客户端发送的不带Content-length的请求信息
- 412 Precondition Failed 客户端请求信息的先决条件错误。
- 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
- 414 Request-URI Too Large 请求的URI(URI通常为网址)过长,服务器无法处理
- 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
- 416 Requested range not satisflable 客户端请求的范围无效
- 417 Expectation Failed 服务器无法满足Expect的请求头信息
- 5** 服务器错误,服务器在处理请求的过程中发生了错误
- 500 Internal Server Error 服务器捏不错误,无法完成请求
- 501 Not Implemented 服务器不支持请求的功能,无法完成请求
- 502 Bad Gateway 作为网关或代理工作的服务器尝试执行请求时,从远程服务器收到了一个无效的响应
- 503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
- 504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
- 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理。
- 1** 信息服务器收到请求,需要请求者继续执行操作
2.diff 算法 && 虚拟 DOM
- diff 算法是一种对比算法。
1、只对同级比较,跨层级的dom不会进行复用
2、不同类型节点生成的dom树不同,此时会直销毁老节点及子孙节点,并新建节点
3、可以通过key对元素diff的过程提供复用的线索
# 15张图,20分钟吃透Diff算法核心原理,我说的!!!
3.var、let、const 的区别
let 和 const 是ES6对 var 的改良,能用const 不用let 能用let 不用 var
- var
- 不是块级作用域
- 有变量提升,会对程序的维护造成困扰
- 不会为异步任务单独绑定变量
- 可以被重复定义,随意松散
- let
- let 声明的变量是块级作用域,解决了原来使用var容易污染全局变量的弊端。
- let 声明的变量不存在变量提升(也有认为存在),从作用域开始到初始化位置承做“暂存死区",对于变量的暂存死去中使用会报reference错误。
- let 不可以被重复定义变量
- 非全局变量
- const
- let的特性const均具有
- const声明常量的时候,一定要初始化值
- const定义的常量值不允许修改。如果常量的类型是复杂类型(对象、数组等),对于常量本身的操作是可以的。因为const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变。
- const