序列文章JS面试之函数(1)JS面试之对象(2)JS面试之数组的几个不low操作(3)前言一篇搞定面试的http协议和缓存相关; 文字概念很多,大家可以从http协议版本为主线,分析了版本的区别和缓存属性分类及怎么设置1.http请求过程验证—请求头—请求主体—响应头—响应主体—断开连接2.http0.91.只允许客户端发送GET这一种请求;2.且不支持请求头,协议只支持纯文本;3.无状态性,每个访问独立处理,完成断开;4.无状态码3.http1.01.有身份认证,三次握手;2.请求与响应支持头域:请求头内容:属性名含义Accept可接受的MIME类型Accept-Encoding数据可解码的格式Accept-Language可接受语言Connection值keep-alive是长连接Host主机和端口Pragma是否缓存,指定no-cache返回刷新Referer页面路由If-Modified-Since值为时间响应头内容:属性名含义Connection值keep-alive是长连接Content-Type返回文档类型,常见的值有text/plain,text/html,text/jsonDate消息发送的时间Server服务器名字Last-Modified值为时间,s返回的最后修改时间Expires缓存过期时间,b和s时间做对比注意: ①.expires是响应头内容,返回一个固定的时间,缺陷是时间到了服务器要重新设置 ②.请求头中如果有If-Modified-Since,服务器会将时间与last-modified对比,相同返回3042.响应对象以一个响应状态行开始3.响应对象不只限于超文本4.支持GET、HEAD、POST方法5.有状态码6.支持长连接(但默认还是使用短连接),缓存机制,以及3.http1.11.请求头增加Cache-Control属性名含义Cache-Control1.1引入的方法,指定请求和响应遵循的缓存机制,值有:public(b和s都缓存),private(b缓存),no-cache(不缓存),no-store(不缓存),max-age(缓存时间,s为单位),min-fresh(最小更新时间),max-age=3600If-None-Match上次请求响应头返回的etag值2.响应头增加Cache-Control所有的缓存机制是否可以缓存及哪种类型etag返回的哈希值,第二次请求头携带去和服务器值对比3.注意:①.Cache-Control的max-age返回是缓存的相对时间;②.Cache-Control优先级比expires高;③.缺点:不能第一时间拿到最新修改文件4.http2.01.采用二进制格式传输;2.多路复用,其实就是将请求数据分成帧,乱序发送到TCP中,TCP只能有一个steam,所以还是会阻塞3.报头压缩;4.服务器推送,主动向B端发送静态资源,避免往返延迟5.http3.01.是基于QUIC协议,基于UDP2.特点:①.自定义连接机制:TCP以IP/端口标识,变化重新连接握手,UDP是一64位ID标识,是无连接②.自定义重传机制:TCP使用序号和应答传输,QUIC是使用递增序号传输③.无阻塞的多路复用:同一条QUIC可以创建多个steam6.https①.https是在http协议的基础上加了个SSL②.主要包括:握手(凭证交换和验证)和记录协议(数据进行加密);详情请戳:常见https,SSH协议和MD5加密方式分析7.缓存1.按协议分:协议层缓存和非http协议缓存 ①.协议层缓存:利用http协议头属性值设置 ②.非协议层缓存:利用meta标签的http-equiv属性值Expires,set-cookie2.按缓存分:强缓存和协商缓存 ①.强缓存:利用If-modify-sincecache-control和expires设置,因为是时间对比,所以在缓存期间不请求 ②.协商缓存:响应头返回etag的哈希值,第二次请求头If-none-match携带上次哈希值3.F5刷新会忽略强缓存不会忽略协商缓存,ctrl+f5都失效8.状态码序列详情1XX(通知) 2XX(成功)200(成功)、201(服务器创建)、202(服务器接收未处理)、203(非授权信息)、204(未返回内容)、205(重置内容)、206(部分内容)3XX(重定向)301(永久移动)、302(临时移动)、303(查看其他位置)、304(未修改)、305(使用代理)、307(临时重定向)4XX(客户端错误)400(错误请求)、401(未授权)、403(禁止)、404(未找到)、405(方法禁用)、406(不接受)、407(需要代理授权)5XX(服务器错误)500(服务器异常)、501(尚未实施)、502(错误网关)、503(服务不可用)、504(网关超时)、505(HTTP 版本不受支持)9.总结协议版本内容http0.9只允许客户端发送GET这一种请求;且不支持请求头,协议只支持纯文本;无状态性,每个访问独立处理,完成断开;无状态码http1.0解决0.9的缺点,增加If-modify-since(last-modify)和expires缓存属性http1.增加cache-control和If-none-match(etag)缓存属性http2.0采用二进制格式传输;多路复用;报头压缩;服务器推送http3.0采用QUIC协议,自定义连接机制;自定义重传机制;无阻塞的多路复用缓存类型特性强缓存通过If-modify-since(last-modify)、expires和cache-control设置,属性值是时间,所以在时间内不用请求协商缓存通过If-none-match(etag)设置,etag属性是哈希值,所以要请求和服务器值对比