必考知识(中)

2 必考知识(中)

2.1 请问在浏览器中输入 URL后,浏览器会做哪些工作?

【考点映射】

  • 浏览器整个渲染过程

【频率】★★★★★

【难度】☆☆

【参考答案】

从输入URL到渲染出整个页面包括三个部分:

(1)、DNS解析URL

DNS解析就是寻找哪个服务器上有请求的资源,因为ip地址不易记忆,一般会使用URL域名(如www.baidu.com)作为网址,DNS解析就是将域名“翻译”成IP地址

具体过程:

a、浏览器缓存:浏览器会按照一定的频率,缓存DNS记录

b、操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,就会取操作系统中找

c、路由缓存:路由器也有DNS缓存

d、ISP的DNS服务器:ISP有专门的DNS服务器应对DNS查询请求

e、根服务器:ISP的DNS服务器找不到,就要向根服务器发出请求,进行递归查询

(2)、浏览器发送请求与服务器交互

a、浏览器利用tcp协议通过三次握手与服务器建立连接

http请求包括header和body,header中包括请求的方式(get和post)、请求的协议 (http、https、ftp)、请求的地址ip、缓存cookie,body中有请求的内容

b、浏览器根据解析到的IP地址和端口号发起http的get请求

c、服务器接收到http请求之后,开始搜索html页面,并使用http返回响应报文

d、若状态码为200显示响应成功,浏览器接收到返回的HTML页面后,开始渲染页面

(3)、浏览器对接收到的HTML页面进行渲染

a、浏览器根据深度遍历的方式把HTML节点遍历成DOM树

b、将CSS解析成CSSOM树

c、将DOM树和CSSOM树构造成Render树

d、根据Render树计算所有节点在屏幕中的位置,进行布局(回流)

e、遍历Render树并调用硬件API绘制所有节点(重绘)

2.2 请问你了解浏览器缓存吗?

【考点映射】

  • 浏览器缓存原理

【频率】★★★★★

【难度】☆☆

【参考答案】

缓存可以重复利用文件,降低网络负荷,提高网页打开速度,提升用户体验

缓存分类:

从宏观上分为私有缓存和共享缓存,共享缓存就是那些能被各级代理缓存的缓存,私有缓存就是用户专享的,各级代理不能缓存

从微观上可以分为以下几类:

a、浏览器缓存

b、代理服务器缓存

c、CDN缓存

d、数据库缓存

e、应用层缓存

主要对浏览器的缓存进行分析:


(1)、HTTP缓存:主要分为强缓存与协商缓存

  • 强缓存

强可理解为强制的意思,当浏览器去请求某个文件的时候,服务端就在respone header里面对该文件做了缓存配置。缓存的时间、缓存类型都由服务端控制,具体由 respone header 的cache-control 控制,常见的设置是max-age public private no-cache no-store等,各类设置对应情况:

a、cache-control: max-age=xxxx,public

客户端和代理服务器都可以缓存该资源,客户端在xxx秒的有效期内,如果有请求该资源的需求的话就直接读取缓存,statu code200 ,如果用户做了刷新操作,就向服务器发起http请求

b、cache-control: max-age=xxxx,private

只让客户端可以缓存该资源;代理服务器不缓存,客户端在xxx秒内直接读取缓存,statu code:200

c、cache-control: max-age=xxxx,immutable

客户端在xxx秒的有效期内,如果有请求该资源的需求的话就直接读取缓存,statu code:200 ,即使用户做了刷新操作,也不向服务器发起http请求

d、cache-control: no-cache

跳过设置强缓存,但不妨碍设置协商缓存;通常做了强缓存,只有强缓存失效了才走协商缓存的,设置了no-cache就不会走强缓存了,每次请求都回询问服务端

e、cache-control: no-store

不缓存,客户端、服务器都不缓存

  • 协商缓存

可理解为强缓存就是为资源设置一个有效时间,每次请求资源时都会检查是否过期,只有过期才会去请求服务器(可有效减少请求次数),当强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程协商缓存生效,返回304和Not Modified

在 response header里面的设置etag、last-modified

etag:每个文件具有唯一一个“标识”

last-modified:文件的修改时间,精确到秒

每次请求返回携带response header中的etag和last-modified,在下次请求时request header也会带上,服务端对比etag标识,判断资源是否更改,如更改直接返回新的资源,并更新response header的etag、last-modified,如资源不变,etag、last-modified不变,对客户端来说,每次请求都进行了协商缓存,即:

发请求-->资源是否过期?-->过期(没过期为强缓存)-->请求服务器-->服务器对比资源是否真的过期?-->没过期-->返回304状态码-->客户端用缓存的老资源

当服务端发现资源过期时:

服务器对比资源是否真的过期-?->过期-->返回200状态码-->客户端像第一次接收该资源一样,记录cache-control中的max-age、etag、last-modified等信息

(2)、本地存储

主要有:localStorage,sessionStorage和cookie,WebSql和IndexDB主要用在前端有大容量存储需求的页面上,如在线编辑浏览器或者网页邮箱,可以将数据存储在浏览器,应该根据不同的场景进行使用

  • Cookie

由服务器生成,且前端也可设置,保存在客户端本地的一个文件,通过response header的set-Cookie字段进行设置,且Cookie的内容自动在请求的时候被传递给服务器

其中包含的信息:

a、用户ID、密码、浏览过的网页、停留的时间等信息,当该用户再打开该网站时,网站通过读取Cookie,就可以做出相应的动作,如身份校验、提示语等

b、还保存host属性,即网站的域名或ip,一个网站只能读取它自己放置的信息,不能读取其他网站的Cookie文件

Cookie 优点:给用户更人性化

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

前端岗面试求职真题解析 文章被收录于专栏

前端岗位面试求职攻略及真题解析~~

全部评论

相关推荐

AFBUFYGRFHJLP:直接去美帝试试看全奖phd吧
点赞 评论 收藏
分享
安静的垂耳兔在泡澡:ks已经第八次投递了,它起码挂了还让你再投,不错了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务