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

2019-12-23  本文已影响0人  _一九九一_

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

耗时的角度分析:


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

DNS查询


// 希望在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请求?

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

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

HTTP 请求及响应


HTTP?

HTTP请求报文?

请求头部?

请求头 说明
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三次握手,四次挥手?

服务器响应


响应报文的

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' }

JS解析

上一篇 下一篇

猜你喜欢

热点阅读