浏览器渲染过程

目录

流程图
选择浏览器--->输入URL:协议、域名(介绍dns)、端口、文件路径、传输字符串--->
向服务器发出请求(请求行(传输方式、文件路径、协议/版本号)、请求头(Host、Accept、User-Agent、Content-Type)回车、消息体--->通过dns找到ip所在服务器--->服务器给出响应(状态行(协议/版本号、状态码、状态描述)、响应头(Content-Type、Server、Date)、回车、消息体)

具体流程是:

第一步是,在浏览器输入URL,URL是用来寻找资源用的,如果在网络上寻找资源一般会用到http协议,如果是在本地寻找资源会用到file协议。一般在浏览器上输入的是域名,而不是IP,是为了方便和保密性。

第二步是对域名进行解析,域名被解析后会解析出资源所在机器的ip地址,多个域名可能有同一个ip地址。在解析域名时,会按照从浏览器的缓存、系统的hosts文件、路由器缓存、电信服务商的顺序寻找资源所在的ip地址。

第三步,找到ip地址后,在资源所在服务器里进行处理,通过系统里名为Web server的应用对请求进行处理,又或是Web server接收请求反向代理到其他web server。

第四步,网站处理流程,是指通过控制器统合请求和数据、模型管理数据库、视图制作网页模板,然后在浏览器上显示网站的MVC(模型视图控制器)。

第五步,浏览器的处理,html的字符串被解析、比如link的css、script的js、img的图片。然后得到渲染树,绘制在屏幕上。

准备工作
工具:
服务器(我使用阿里云服务器)
浏览器(Chrome、IE)
git bash(在Windows系统环境下操作,Linux和Mac系统可以直接用终端操作)

需要的知识点
URL、DNS、请求、响应、浏览器渲染方式

URL是什么?
Url是统一资源定位符,包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”。完整的、带有授权部分的普通统一资源标志符语法看上去如下:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志

第一部分
http——超文本传输协议资源
https——用安全套接字层传送的超文本传输协议(加密的HTTP)
ftp——文件传输协议
file——当地电脑或网上分享的文件

第二部分
文件所在的服务器的名称或IP地址,后面是到达这个文件的路径和文件本身的名称。服务器的名称或IP地址后面有时还跟一个冒号和一个端口号。

TCP 或 UDP 协议的规则,一个端口对应一个服务
0 到 1023 号端口是保留端口
常用端口:
21 端口 - FTP
80 端口 - HTTP
53 端口 - DNS
443 端口 - HTTPS
1080 端口 - SOCKS 代理

分类
绝对URL,显示文件的完整路径,这意味着绝对URL本身所在的位置与被引用的实际文件的位置无关。
相对URL以包含URL本身的文件夹的位置为参考点,描述目标文件夹的位置。

Dns 是什么?
域名系统,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。Dns协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对Dns有规范说明,RFC 2136对Dns的动态更新进行说明,RFC 2308对Dns查询的反向缓存进行说明。
浏览器输入:域名
Dns输出:IP
baidu.com 对应的 ip 有很多,是因为不同的Dns服务器解析的ip不同
一个域名对应的 ip 是由域名所有者指定的
改 hosts 可以手动指定域名对应的 IP,Windows 的 hosts 文件位于 C:\Windows\System32\drivers\etc
DNS 可能有缓存在:浏览器的缓存、系统的hosts文件、路由器缓存、电信服务商缓存

Dns劫持是什么?
黑客攻击某些域名服务器,将域名对应IP修改。当网友使用浏览器在这些域名浏览器输入域名的,浏览器将会打开黑客指定IP的网页,而不是真正需要的IP网页。

电脑上不了网,为什么修改dns为8.8.8.8或者114.114.114.114?
8.8.8.8是百度提供的一个服务器,114.114.114.114是国内一个比较权威的服务商。当正常的域名解析过程出现问题,可以忽略过程直接在这两个服务器寻找资源。

浏览器请求的格式是怎样的?
1 请求行:动词 路径 协议/版本号 比如: GET /index.html HTTP/1.1
2 请求头:
Host: 1.2.3.4
Accept: html, xhtml, xml
User-Agent: Chrome / Mac
Content-Type: application/x-www-form-urlencoded
3 回车
4 消息体:username=xxxx&password=yyyyy

服务器响应的格式是怎样的?
一个响应
1 状态行:协议/版本号 状态码 状态描述
2 响应头:
Content-Type: text/html;charset=utf-8
server:apache tomcat [告诉浏览器我是tomcat]
Content-Encoding:gzip[告诉浏览器我使用了gzip]
Content-Lenght:80 [告诉浏览器回送的数据大小]
Content-Language:zh-cn[支持中文]
Content-Type:text/html;charset=gb2312[内容格式和编码]
Date: Thu, 23 Feb 2017 13:57:26
3 回车
4 消息体
<!doctype html>
<html>....
<head>... <body>...

常见的状态码由哪些?
200:OK,表示服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
301:Moved Permanently, 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。
302:Found,临时移动。与301类似。但资源只是临时被移动。请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
403:Forbidden ,表示用户得到授权,但是访问是被禁止的。服务器理解请求客户端的请求,但是拒绝执行此请求。
404:NOT FOUND ,用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
500 Internal Server Error 内部服务器错误

Web服务器有什么用?
处理用户的Request,寻找域名对应的目录的资源。这些不同的域名在一台机器下,则IP是一致的。

分析请求
curl 发请求,得到响应
curl -L http://baidu.com
curl http://101.200.33.143:8888/index.html

curl 得到响应头

curl --head http://101.200.33.143:8888/index.html

curl 得到头和体

curl -D - http://101.200.33.143:8888/index.html

浏览器解析、渲染顺序
解析:浏览器理解下载到的文件里的字符串
渲染:将节点描绘在屏幕上(DOM树里)

结论
CSS 和 JS 都会阻塞页面渲染,但不会阻塞解析
CSS 有时候会阻塞它前面标签的渲染,有时候不会
Chrome 要等所有 CSS 下载完了,才开始渲染页面(除了动态加载的 CSS)
IE 看到标签就渲染,不等后面的 CSS 下载
JS 不会阻塞它前面的标签的渲染

为什么 CSS 写在 head 里
CSS 下载完之前,不会去展示 后面 的 HTML
CSS 可以预加载,以节约下载时间
一个域名同一时间最多请求4个链接(IE)、20个(Chrome)、10个(其他)
为了好看,不出现白屏(FOUC),避免页面闪烁。

是否要等 CSS 全都下载完再显示页面?
Chrome 不管 HTML 在 CSS 前面还是后面,都要等 CSS 下载完再 展示 HTML
IE 只要看到一个 HTML 标签,就解析渲染。

Firefox(兼容Chrome和IE的特性)
如果 link 在 head 里,那么一定要等 CSS 下载完再展示 HTML;
如果 link 在 body 里,那么看到一个 HTML 标签就展示。

为什么 JS 写在 body 最后
1、JS不影响渲染,可以等渲染完后,再下JS,可以让页面被阻塞时间减少,不会太影响用户体验。
2、JS在前面,可能会获取不到html元素,当然可以通过添加onload函数,等解析后再获取。

技巧
使用 Chrome 开发者工具模拟低网速
将文件变大,使得下载速度变长,便于观察实验结果

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容