最后向浏览器端发回响应,此时在HTTP协议下,浏览器从服务器接收到text/html类型的代码,
浏览器开始显示此html,并获取其中内嵌资源地址,
然后浏览器再发起请求来获取这些资源,并在浏览器的html中显示。
(域名解析 -> 建立连接 -> 发起请求 -> 等待响应 -> 接收数据)
3、浏览器加载显示html页面内容的顺序
(1)浏览器下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的。
(2)在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完)。
(3)如果遇到语义解释性的标签嵌入文件(JS脚本,CSS的下载过程会启用单独连接进行下载)。
(4)并且在下载后进行解析,解析过程中,停止页面所有往下元素的下载。
(5)样式表在下载完成后,将和以前下载的所有样式表一起进行解析,解析完成后,将对此前所有元素(含以前已经渲染的)重新进行渲染。
(6)JS、CSS中如有重定义,后定义函数将覆盖前定义函数。
4、JS的加载
(1)不能并行下载和解析(阻塞下载)。
(2)当引用了JS的时候,浏览器发送1个jsrequest就会一直等待该request的返回。
因为浏览器需要1个稳定的DOM树结构,而JS中很有可能有代码直接改变了DOM树结构,
比如使用 document.write 或 appendChild,甚至是直接使用的location.href进行跳转,
浏览器为了防止出现JS修改DOM树,需要重新构建DOM树的情况,所以就会阻塞其他的下载和呈现。
5、一个页面从输入URL到页面加载显示完成,这个过程中都发生了什么?
查找浏览器缓存
DNS解析、查找该域名对应的IP地址、重定向(301)、发出第二个GET请求
进行HTTP协议会话
客户端发送报头(请求报头)
服务器回馈报头(响应报头)
html文档开始下载
文档树建立,根据标记请求所需指定MIME类型的文件
文件显示
浏览器这边做的工作大致分为以下几步:
加载:根据请求的URL进行域名解析,向服务器发起请求,接收文件(HTML、JS、CSS、图象等)。
解析:对加载到的资源(HTML、JS、CSS等)进行语法解析,建议相应的内部数据结构
(比如HTML的DOM树,JS的(对象)属性表,CSS的样式规则等等)}