浏览器

214 阅读4分钟

浏览器缓存

  • 首先通过Cache-Control验证强缓存是否可用。
  • 如果强缓存可用,直接使用。
  • 否则进入协商缓存,即发送http请求,服务器通过请求中if-Modibed-Since和if-None-Match这些请求字段检查资源是否更新。
  • 若资源更新,返回资源和200状态码。
  • 否则,返回304,告诉浏览器直接从缓存获取资源。

跨域

  • 同源策略:同协议、同域名、同端口,三者相同,其中一个不同产生跨域。
  • 解决方案:jsonp,nginx反向代理(proxy_pass),cors请求头域名设置或*允许跨域

浏览器本地缓存

  • Cookie、localStorage、sessionStorage、indexDB。
  • Cookie大小只有4KB,localStorage和sessionStorage大小为5M。
  • SessionStorage仅在当前浏览器窗口关闭之前有效。
  • LocalStorage始终有效,窗口关闭和浏览器关闭也会一直保存,数据持久化。
  • Cookie如果未设置有效时间,关闭窗口或浏览器之前有效,设置有效时间,已有效时间为准。

浏览器地址栏输入url到底显示页面的步骤

  • 浏览器根据请求的URL交给DNS域名解析,找到真实的IP,向服务器发起请求。
  • 服务器交给后台处理完成后返回数据,浏览器接受文件(HTML,CSS,JS, Image等)。
  • 浏览器对加载到的资源(HTML,CSS,JS等)进行语法解析,建立相对应的内部数据结构(如HTML的DOM)。
  • 载入解析到的资源文件,渲染页面,完成。

网页生成的过程

  • HTML 解析出 DOM Tree。
  • CSS解析出 Style Rules(规则)。
  • 两者关联生成Render Tree。
  • Loyout布局根据Render Tree计算每个节点信息。
  • 浏览器根据计算好的信息进行渲染整个页面。

重绘,回流(重排)区别

  • 回流必定引发重绘,重绘不一定引发回流,且回流代价更高。
  • 执行顺序:先回流再重绘。
  • 重绘:外观改变,color、background-color、border-color。
  • 回流(重排):添加删除可见的DOM。
    • 元素的位置改变。
    • 元素的尺寸改变(外边距,内边距,边框厚度,高度等几何属性)。
    • 页面渲染初始化。
    • 浏览器窗口尺寸改变。

script defer和async的区别

  • async(异步脚本):文档的加载和渲染以及JS的加载和执行是并行的(立即下载并行)。
  • defer(延迟脚本):文档的加载和渲染以及JS的加载和执行,执行等文档要等文档所有原型解析完(立即下载延迟执行)。

http和https区别

  • https需要ca机构申请证书。
  • http是超文本传输协议,信息是文明传输,https则是具有安全性的SSL加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前端是80后者是443。
  • http的连接很简单,是无状态的。https协议是有SSL+http协议构建的可进行加密传输,身份认证的网络协议,比http协议安全。

post和get的区别

  • get在浏览器回退是不会再次请求的,post会再次请求。
  • get请求会被浏览器主动缓存,post不会,需要手动设置。
  • get请求参数会被完整保留在浏览器历史记录里面,post中的参数不会。
  • get请求的url参数是有限制的,post没有限制。
  • get参数通过url传递,post放在request body中。
  • get比post更不安全,因为参数暴露在url上,所以不能传递敏感信息。
  • get一般用于查询信息,post一般用来提交某种信息进行修改操作。

http状态码

  • 100临时请求。
  • 200成功。
  • 301永久重定向。
  • 302临时重定向。
  • 304资源缓存。
  • 403服务器禁止访问。
  • 404服务器资源未找到。
  • 500,502服务器内部错误。
  • 504服务器超时。

TCP三次握手四次挥手

  • 三次握手
    • 客户端向服务器端发送一段TCp报文,请求建立连接。
    • 服务器端收到来自客户端的TCP报文之后,结束Listen。并发送一段TCP报文,同意建立新连接。
    • 客户端收到服务器端的TCP报文之后发送最后一段TCP报文,明确客户端和服务器端数据传输正常,确定建立连接。
  • 四次挥手
    • 客户端向服务器端发送一个TCP报文,请求释放连接。
    • 服务器端收到来自客户端的TCP报文之后,开始做释放连接准备,并发送一个TCP报文,确认客户端想要释放连接。
    • 释放连接准备完成后,再发送一段报文给客户端,已做好释放连接准备。
    • 客户端收到来自服务器端的TCP报文之后,发送最后一段TCP报文,确定了服务器端已做好释放连接。