1.输入地址

这个时候浏览器会从历史记录,书签等地方找到 缓存 的url自动帮用户补全,给出智能提示。然后用户按下 enter键。

2.浏览器解析url获取到协议,主机,端口号,path

1.当请求发起的时候,浏览器开始解析这个域名。一般来说,浏览器会先去本地host中找于域名是否被代理,有的话解析出来的就是对应规则的ip地址;

# For example:
# 102.54.94.97     www.baidu.com

2.如果在本地的host中没有找到对应的规则,浏览器就会发起一个DNS请求到本地DNS服务器,本地DNS服务器一般都是用户的网络接入服务器商提供,比如中国电信,中国移动。
3.本地DNS服务器开始查询用户输入的网址的缓存记录(参考2-6),如果缓存中有记录,就直接返回结果,这个过程是递归的查询过程,如果本地DNS服务器发现没有缓存记录,则向DNS根服务器进行查询;
4.根DNS服务器没有记录具体域名和ip的对应关系,而是告诉本地的DNS服务器,你可以去域服务器上继续查询,并给出域服务器的地址,这个过程是迭代的过程。
5.本地DNS服务器继续向域服务器发出请求,域服务器收到请求后,不会直接返回域名和ip的对应关系,而是告诉本地DNS服务器,输入的域名的解析服务器的地址;
6.本地DNS服务器收到解析服务器地址,并向解析服务器地址发出请求,并返回一个域名和ip地址的对应关系,本地DNS服务器不仅要把地址返回浏览器,还要把这个关系缓存起来,下次再访问这个域名的时候,就可以直接返回结果了,加速网络的访问。

3.浏览器组装一个HTTP (GET) 请求报文

拿到域名对应的ip地址后,浏览器就会以一个随机端口(1024 < x < 65535)向服务器的80端口发送TCP请求连接。这个链接进入服务器端后,进入网卡,进入内核的TCP/IP协议栈(可能还有防火墙),最终到达服务器端的web程序,并成功建立TCP/IP连接。

TCP建立后,发起一个http请求,一个典型的 http request header 一般需要包括请求的方法,例如 GET 或者 POST 等,不常用的还有 PUT 和 DELETE 、HEAD、OPTION以及 TRACE 方法,一般的浏览器只能发起 GET 或者 POST 请求。

客户端向服务器端发送的请求包括哪些内容?
1.请求方法/URL协议/版本
2.请求头(Request header)
3.请求正文

GET/sample.jspHTTP/1.1 // 方法URL议/版本
// Request Header start
// 请求头包含许多有关的客户端环境和请求正文的有用信息。
// 例如,请求头可以声明浏览器所用的语言,请求正文的长度等。
Accept:image/gif.image/jpeg,
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate
// Request Header end// 请求正文
// 请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。
// 请求正文中可以包含客户提交的查询字符串信息:
username=jinqiao&password=1234

TCP三次握手:
第一次握手:客户端发送一个SYN= 1(标志位, 1代表要建立连接),seq=x(x为随机数)的数据包到服务器,然后客户端进入SYN_SENT状态,等待服务器端的确认;

第二次握手:服务器端收到客户端标志位SYN=1的请求包知道客户端想要建立连接,服务器端将SYN和ACK都设置成1,ack=x + 1,随机生成一个seq=y,并将数据包返回给客户端以确认连接请求,服务器端进入SYN_RCVD状态;

第三次握手:客户端收到数据包后,先判断ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将数据包再发给服务器端,服务器端检查ack=y+1?ACK=1?如果是的话,则连接成功建立。客户端和服务器端都进入ESTABLISHED状态,三次握手完成,客户端和服务器端连接建立,他么可以传输数据了。

TCP四次挥手:
第一次挥手:客户端向服务端发送一个FIN=m请求,用来关闭客户端到服务端的数据传送,此时客户端进入FIN_WAIT_1状态;
第二次挥手:服务器端收到FIN请求后,向客户端发送ack=m+1的数据包,服务器端进入CLOSE_WAIT状态;
第三次挥手:服务器端再发送一个FIN,用来关闭服务器端到客户端的数据传送,此时服务器端进入LAST_ACK状态;
第四次挥手:客户端收到FIN后,进入TIME_WAIT状态,发送一个序号+1的ack,服务器端接收到进入CLOSED状态,完成四次挥手。

4.服务器将响应报文通过连接好的TCP连接发送返回给浏览器,浏览器接收HTTP响应

后端从固定的端口接收到TCP报文开始,就会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。(这一层可能会经历反向代理配置),

http响应格式:
1.状态行
2.响应头(Response Header)
3.响应正文

// 状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。
HTTP/1.1 200 OK // 状态行:
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122<html>
<head>
<title>http</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>

5. 浏览器显示 HTML

1.解析html文档;
2.构建dom树;
3.构建css树;
4.构建render树;
5.布局render树;
6.绘制render树。
1.浏览器在解析html文件的时候,会“自上而下的”加载,并在加载过程中进行解析和渲染,在解析过程中若需要请求外部资源时,比如图片,外链css,请求过程是异步的,并不会影响html文档进行加载。

2.解析过程中,浏览器首先会解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念: reflow(回流)和repain(重绘)。

3.DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为relow;当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。

4.页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。所以我们应该尽可能少的减少reflow和repain。

5.当文档加载过程中遇到js文件,html文档会挂起渲染(加载解析渲染同步)的线程,不仅要等待文档中js文件加载完毕,还要等待解析执行完毕,才可以恢复html文档的渲染线程。因为JS有可能会修改DOM,最为经典的document.write,这意味着,在JS执行完成前,后续所有资源的下载可能是没有必要的,这是js阻塞后续资源下载的根本原因。所以我明平时的代码中,js是放在html文档末尾的。

6.JS的解析是由浏览器中的JS解析引擎完成的, JS是单线程运行,也就是说,在同一个时间内只能做一件事,所有的任务都需要排队,前一个任务结束,后一个任务才能开始。但是又存在某些任务比较耗时,如IO读写等,所以需要一种机制可以先执行排在后面的任务,这就是:同步任务(synchronous)和异步任务(asynchronous)。(这里可以引出js的事件循环机制)

6.用户戴上眼镜开始内卷。。。。。。。

浏览器输入url开始到页面的展现,具体发生了什么?相关推荐

  1. 【网络】浏览器输入URL到展示页面全过程(含互联网协议及HTTPS简介)

    这里写自定义目录标题 前言 1.URL介绍 2.DNS查找 3.互联网协议 3.1 实体层 3.2 链路层 3.2.1 以太网协议 3.2.2 Mac地址 3.2.3 广播 3.3 网络层 3.3.1 ...

  2. 从浏览器输入URL到展示页面的全流程

    从本地终端(如手机.电脑)访问一个网站,怎么处理请求并且加载出数据的.实际上考察的是计算机网络TCP/IP协议栈. 主要的得分项为TCP协议各层的描述.数据传送的封装和解包.一次页面包含多个TCP连接 ...

  3. html页面返回原理,浏览器输入URL到界面显示(HTML渲染)发生了什么?

    浏览器从输入URL到界面显示一共经历了6个阶段 1. DNS(域名)解析 2. TCP连接(三次握手) 3. 发送HTTP请求 4. 服务器处理请求并返回HTTP报文 5. 浏览器解析渲染页面 6.  ...

  4. 从输入URL到显示页面的过程中发生了什么?

    概览 关于这个问题,我看过很多文章,每个人分析的方法与总结的步骤都不相同.我这里按照自己的理解把过程分为了十个部分.因为我主要学习后端,所以最后几步前端的内容略写了. 一.URL解析 二.DNS域名解 ...

  5. 从浏览器输入URL到最终看到页面, 这其中经历了哪些过程 ?

    从网络原理来看 1. URL解析 2. 构造http请求 3. 构造完http请求就需要将数据传给传输层了 4. 网络层 5. 数据链路层 6.物理层 7. 路由器 8. 到达服务器的物理层 9. 解 ...

  6. 从浏览器地址栏输入url到显示页面的步骤

    从浏览器地址栏输入url到显示页面的步骤(以HTTP为例) - 在浏览器地址栏输入URL - 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤     - 如果资源未缓存,发起新请求   ...

  7. 从浏览器输入URL到页面显示的过程

    从浏览器地址栏输入url到显示页面的步骤: 目录 1.概述 浏览器根据请求的URL交给DNS域名解析器,找到真实IP,向服务器发起请求: 三次握手建立连接,服务器交给后台处理完成后返回数据,浏览器接收 ...

  8. 每天一道面试题 浏览器输入URL到页面呈现详细过程

    浏览器输入URL到页面呈现过程 1.当用户敲下回车的那一刻,浏览器会判断用户输入的是ip地址还是域名 2.如果是ip地址就直接访问,否则就会先解析域名 3.域名的解析会先从浏览器缓存中去查询,是否有之 ...

  9. 从浏览器输入url到页面加载(六)前端必须了解的路由器和光纤小知识

    前言 上一章我们说到了数据包在网线中的故事,说到了双绞线,还说到了麻花.这一章继续沿着这条线路往下走,说一些和cdn以及路由器相关,运营商以及光纤相关的小知识,前端同学应该了解一下的 目录 前言 1. ...

最新文章

  1. 机器学习笔记(十三)半监督学习
  2. 浏览器中Javascript的加载和执行
  3. Kubernetes容器网络及网络模型
  4. 微量元素与中医药 谋定·大健康医药-李喜贵:辩证研究病理变化
  5. MySQL主从复制(Centos6.3MySQL5.6)
  6. nssl1468-V【状压,数学期望,dfs】
  7. html+css+js+jquery之常见的的本地存储实现一个简单的todoList项目
  8. 实例40:python
  9. SFB 项目经验-82-Active Directory Replication Status
  10. 在Windows下编译OpenSSL(VS2005)【转】
  11. 分布式配置中心-Disconf入门指南
  12. 187.重复的DNA序列
  13. java屠龙_倚天屠龙之江湖神器
  14. ARM启动流程及启动代码分析
  15. 草坪护理产品行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  16. 大宗商品交易平台:解决期货的最后“一公里”
  17. Win10《芒果TV》更新v3.8.30流星版:优化稳定性、升级无边框播放体验
  18. c标准库头文件ctype.h详解
  19. Ubuntu系统没有声音解决方案
  20. 【微信小程序】随机点名系统(点击开始滚动名字点击结束按钮结束滚动)

热门文章

  1. 如何挖掘和策划公关传播内容,不再局限于新闻稿
  2. Python自动化运维之Linux概述和虚拟机安装使用终极指南
  3. 微信独家防封秘籍 易被封号的几种原因及解封方法
  4. ftp服务器适用网站,使用 WFTPD 搭建 FTP 服务器
  5. 数据结构之堆——C++实现大顶堆和小顶堆
  6. 5G技术中的无源光器件(三)
  7. 艺术设计类学什么计算机课程,艺术设计专业学什么 最好的大学有哪些
  8. 使用C语言gtk编程一个贪吃蛇游戏设计与实现
  9. Cocos2d-JS实现的贪吃蛇
  10. 【2022-2028全球与中国复合材料双极板市场现状及未来发展趋势】