浏览器输入url 按下回车发生了什么

浏览器输入url 按下回车发生了什么?

耗时的角度分析:


  1. DNS 查询
  2. TCP 连接
  3. HTTP 请求及响应
  4. 服务器响应
  5. 客户端渲染

DNS查询


  • DNS(Domain Name System, 域名系统)
  • 是域名和IP地址相互映射的一个分布式数据库
  • DNS 查询就是将域名转换成 IP 的过程
  • DNS Prefetch 浏览器会对其IP进行缓存,有效缩短了DNS的解析时间
  • 自动解析: 当遇到a标签,自动将href中的域名解析为IP地址。但是HTTPS页面中不会自动解析。
  • 手动解析:
// 希望在HTTPS页面开启自动解析功能时
<meta http-equiv="x-dns-prefetch-control" content="on">
// 希望在HTTP页面关闭自动解析功能时,添加如下标记:
<meta http-equiv="x-dns-prefetch-control" content="off">
// 让浏览器预取"//XXXX.com"的解析
<link rel="dns-prefetch" href="//XXXX.com" />

TCP 连接


一个TCP连接可以同时发送几个HTTP请求?

  • HTTP/1.1中,单个TCP连接,在同一时间只能处理一个http请求,虽然存在Pipelining技术支持多个请求同时发送,但存在很多问题无法解决,浏览器默认关闭,所以认为是不支持同时多个请求。
  • HTTP2提供了多路传输功能,多个http请求,可以同时在同一个TCP连接中进行传输。

浏览器与服务器建立一个TCP连接后,是否会在完成一个http请求后断开?什么条件下会断开?

  • HTTP/1.1将 Connection 写入了标准,默认值为 keep-alive 。除非强制设置为Connection: close 才会在请求后关闭TCP连接

浏览器http请求的并发性是如何体现的?并发请求的数量有没有限制?

  • 页面资源请求时,浏览器会同时和服务器建立多个TCP连接,在同一个TCP连接上顺序处理多个HTTP请求。
  • 浏览器的并发性体现在可以建立多个TCP连接,来支持多个http同时请求。
  • Chrome浏览器最多允许对同一个域名Host建立6个TCP连接,不同的浏览器有所区别。

HTTP 请求及响应


HTTP?

  • 他就是计算机通过网络进行通信的规则,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据。

HTTP请求报文?

  • 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成

请求头部?

请求头 说明
Host 接受请求的服务器地址 IP:端口 或 域名
User-Agent 请求的应用程序名称
Connection 连接形式 Connection:Keep-Alive
Accept-Charset 通知服务器可以发送的编码格式
Accept-Encoding 通知服务器可以发送的数据压缩格式
Accept-Language 通知服务器可以发送的语言

post的请求报文

POST  /index.php HTTP/1.1    请求行
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2  请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length:25
Content-Type:application/x-www-form-urlencoded
  空行
username=admin&password=123456  请求数据

  • 请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据,这一行非常重要,必不可少。

为什么要TCP三次握手,四次挥手?

  • 客户端和服务器通过三次握手建立了TCP连接以后,TCP的断开连接,这里就有了的“四次分手”
  • 为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

服务器响应


响应报文的

HTTP/1.1 200 OK  // 状态行
Date: Sun, 17 Mar 2013 08:12:54 GMT  // 响应头部
Server: Apache/2.2.8 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8

image

空行 // 表示结束
<html>  响应数据
<head>
<title>HTTP响应<title>
</head>
<body>
'你好'
</body>
</html>

客户端渲染


解析过程

js修改dom结构或样式 -> 计算style -> layout(重排) -> paint(重绘) -> composite(合成)

  1. Html Parser 解析 html 构建 Dom Tree
  2. Css Parser 解析 css 构建 CSS Rule Tree
  3. 解析完成后,浏览器引擎会通过DOM Tree 和 CSS Rule Tree 来构造 Rendering Tree
  4. 最后通过调用操作系统Native GUI的API绘制。

WebKit CSS 解析器

image.png

#head .warp div span { color: 'red' }

  • 以上代码浏览器会按照从右向左的顺序去读取选择器
  • display:none 不会被放在渲染树中 visibility: hidden 会被放入渲染树

JS解析

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