https://www.cnblogs.com/fundebug/p/what-happens-from-url-to-webpage.html
浏览器通过向 DNS 服务器发送域名,DNS 服务器查询到与域名相对应的 IP 地址,然后返回给浏览器,浏览器再将 IP 地址打在协议上,同时请求参数也会在协议搭载,然后一并发送给对应的服务器。接下来介绍向服务器发送 HTTP 请求阶段,HTTP 请求分为三个部分:TCP 三次握手、http 请求响应信息、关闭 TCP 连接。
¥¥¥¥¥¥¥¥¥¥¥¥¥4¥¥¥¥¥¥¥¥¥¥¥¥¥4¥¥¥¥¥¥¥¥¥¥¥¥¥4
1.DNS解析
DNS解析的过程就是寻找哪台机器上有你需要资源的过程,寻找的过程遵循就近原则。
输入一个网址并按回车的时候浏览器会根据输入的URL去查找对应的IP(就是根据输入的URL查找对应的IP),过程如下:
DNS根据域名查询IP地址的过程为:浏览器缓存 --> 操作系统缓存 --> 路由器缓存–>本地(ISP)域名服务器缓存 --> 根域名服务器。
2.进行TCP连接
这时候浏览器终于得到了IP以后,向服务器发送TCP连接,TCP连接经过三次握手。
3.浏览器发送HTTP请求
4.服务器处理请求
5.浏览器解析渲染页面
1)浏览器显示HTML
2)浏览器向服务器发送请求获取嵌入在HTML中的对象
3)浏览器发送异步(AJAX)请求
6.关闭TCP连接
当数据完成请求到返回的过程之后,根据Connection的Keep-Alive属性可以选择是否断开TCP连接。
TCP的断开与连接不一样,断开可以分为主动关闭和被动关闭,需要经过4次握手。
最后 当浏览器需要的全部数据都已经加载完毕,一个页面就显示完了。
————————————————
版权声明:本文为CSDN博主「何敏华」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44183254/article/details/88745460
¥¥¥¥¥¥¥¥¥¥¥¥¥4¥¥¥¥¥¥¥¥¥¥¥¥¥4
为什么三次握手而不是两次握手
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认
1.浏览器输入url
2.DNS系统完成域名解析IP得到地址;先查浏览器缓存,没有再查寻系统缓存,即本地host文件,再没有向ISP的DNS服务器请求解析域名得到IP地址的映射关系
3.浏览器和服务器之间建立TCP连接,通过socket发送HTTP请求;发送端从应用层往链路层,接收端从链路层往应用层。
4.服务器响应请求,处理,返回数据;事实上,在进入服务器之前,可能还会先经过负责负载均衡的机器,其目的为将请求合理地分配到多个服务器上,在经过了负载均衡后,请求真正地到了服务器的Web Server,比如 Apache,Node.JS等,服务器处理请求返回http响应。
5.客户端收到数据,TCP连接释放,浏览器加载html数据进行页面渲染
1.浏览器识别URL
什么是URL?
url即统一资源定位器,基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名。格式可以分成两部分。
第一部分:模式/协议(scheme):它告诉浏览器如何处理将要打开的文件。最常用的模式是超文本传输协议(Hypertext Transfer Protocol,缩写为HTTP),这个协议可以用来访问网络。其他协议如下:
http 超文本传输协议资源
https 用安全套接字层传送的超文本传输协议
ftp 文件传输协议
mailto 电子邮件地址
ldap 轻型目录访问协议
file 当地电脑或网上分享的文件
news Usenet新闻组
gopher Gopher协议
telnet Telnet协议
第二部分
文件所在的服务器的名称或IP地址,后面是到达这个文件的路径和文件本身的名称。服务器的名称或IP地址后面有时还跟一个冒号和一个端口号。它也可以包含接触服务器必须的用户名称和密码。路径部分包含等级结构的路径定义,一般来说不同部分之间以斜线(/)分隔。询问部分一般用来传送对服务器上的数据库进行动态询问时所需要的参数。
有时候,URL以斜杠“/”结尾,而没有给出文件名,在这种情况下,URL引用路径中最后一个目录中的默认文件(通常对应于主页),这个文件常常被称为 index.html 或 default.htm
2. DNS系统完成域名查询
IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。
查询浏览器缓存。不同的浏览器存储DNS记录的时间是不同的,一般在30秒到2分钟(打开 chrome://net-internals/#dns查看chrome缓存)。
查询系统缓存。若浏览器缓存中没找到,浏览器则会做系统调用(windows里是gethostbyname)进行查询。它会查询本地Host文件,Host的位置因系统而异。
若Host文件也没有,则向DNS服务器发出查询请求,DNS服务器一般为路由器或 ISP 的缓存 DNS 服务器。
ISP的缓存DNS服务器进行递归查询,从根域名服务器查到顶级域名服务器再查到权限域名服务器。最后得到目标域名的IP地址。
到此已经获得了目标域名的IP地址。接下来就是通过 Socket 发送数据
3.浏览器和服务器之间建立TCP连接
TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。
利用TCP/IP通信时,是通过分层顺序和对方通信的。发送端从应用层往链路层,接收端从链路层往应用层。
4.浏览器发出请求
建立连接后,浏览器会发送一个HTTP请求,HTTP请求包含的信息可以分成如下三部分:
请求行(包含请求的方法、URL地址和协议版本)
请求头(Request Header)
请求正文
这时,我们在回过头来看在TCP协议上发送HTTP请求的过程,即:
客户端在应用层发送HTTP请求
在传输层(TCP协议)对HTTP请求进行封装,加入了端口号等信息
在网络层(IP协议)增加了IP地址
在链路层加入了网卡的MAC地址
到此,一个发向对方的请求就封装好了,进入下一部分
5. 服务器响应请求,将数据传输给浏览器
事实上,在进入服务器之前,可能还会先经过负责负载均衡的机器,其目的为将请求合理地分配到多个服务器上,在经过了负载均衡后,请求真正地到了服务器的Web Server,比如 Apache,Node.JS等。
服务器收到客户请求之后,进行了处理,需要把结果返回,也就是返回一个HTTP响应。HTTP响应与HTTP请求类似,也包含三个部分,在此不再赘述。
渲染引擎一边解析HTML,一边将标签用来构建DOM树。当他解析到CSS文件或