分为六步
1. 域名解析
  浏览器首先要做去获得想访问网页的IP地址,浏览器会发送一个UDP的包给DNS域名解析服务器。DNS就会返回给我们百度的IP地址,通常来说浏览器会把访问过的网站的IP保存下来,这样下次访问的时候就会快很多,能够节省很多时间。
  通常来说在解析域名的时候,浏览器就会先看看自己本地的host文件,来看看里边有没有和域名对应的IP地址,如果有就直接使用,如果没有的话浏览器就会发送一个请求到本地的DNS服务器,本地的DNS服务器一般来说都是由网络接入商提供的,比如中国电信等。当本地的DNS服务器收到请求之后会,DNS也会先查询自己的缓存,这个过程是递归查询的,如果缓存中存在就会直接返回,如果这时候还是没有找到对应的IP本地的DNS服务器就向根DNS服务器发送请求进行查询。根DNS服务器上是没有记录哪个域名和IP的对应关系的,他会告诉本地的DNS服务器。你可以到域服务器上进行查询,并且告诉他这个域服务器的地址,这个过程是迭代查询的。这时候本地的DNS服务器会向域服务器发送请求,这里我们请求的是www.baidu.com也就是.com的域名服务器,当.com域服务器收到请求之后,并不会直接返回域名和IP的关系,而是会告诉你的域名的解析服务器的地址,最后本地的DNS服务器向域名的解析服务器发送请求,这时候就能收到一个域名和IP的对应关系,本地的DNS服务器不仅吧这个返回给用户和电脑而且还会自己保存下来,这样下次再访问的时候就能直接返回
  递归查询方式:当局部的DNS服务器不能回答请求的时候,他就需要向其他DNS服务器发送请求

  局部服务器DNS自己向其他服务器进行查询,一般来说先向该域名的根域服务器进行查询,然后再由根域名服务器向下进行查询,最后得到结果之后返回给局部服务器,然后再由局部服务器返回给我们的客户端。
迭代查询的方式
  迭代查询的方式就是,局部的DNS服务器并不会自己向其他服务器进行查询,而是把能够解析该域名的服务器IP地址返回给客户端,客户端会不断的向这些服务器进行查询,直到查询到了位置,迭代的话只会帮你找到相关的服务器,然后说我现在比较忙,你自己去找吧。

  DNS还有负载均衡的作用,现在很多网站都有多个服务器,当一个网站访问量过大的时候,如果所有请求都请求在同一个服务器上,可能服务器就会崩掉,这时候就用到了DNS负载均衡技术,当一个网站有多个服务器地址时,在应答DNS查询的时候,DNS服务器会对每个查询返回不同的解析结果,也就是返回不同的IP地址,从而把访问引导到不同的服务器上去,来达到负载均衡的目的。例如可以根据每台机器的负载量,或者该机器距离用户的地理位置距离等等条件。
  之后就可以建立HTTP协议链接,但是HTTP链接是必须建立在TCP链接上边的,建立TCP链接需要四个东西:本机IP,服务器IP,本机端口,服务器端口。现在已经有本机IP和服务器IP了,本机端口会由操作系统随机给浏览器分配一个,而服务器端口用的是一个众所周知的端口,HTTP的默认端口就是80,这时候我们就具备了进行TCP链接的条件。

2.创建TCP链接
  进行三次握手创建TCP链接…,三次握手成功的时候TCP链接成功创建,这时候就可以发送HTTP请求。

3. 处理HTTP请求,当HTTP协议经过多个路由器成功到达了服务器之后,这时候服务器就要去处理浏览器发来的请求。
  服务器在处理请求的时候主要有三种方式:
  第一种是用一个线程来处理所有的请求,并且同时只能处理一个请求,但是这样的话性能是非常的低的;
  第二种是每一个请求都给他分配一个线程但是当链接和请求比较多的时候就会导致服务器的cpu不堪重负;
  第三种就是采用复用I/O的方式来处理例如通过epoll方式监视所有链接,当链接状态发生改变的时候才去分配空间进行处理

4.处理完请求之后向浏览器返回网页的html
  当服务器把文件数据发送给浏览器之后,能够直接关闭TCP吗?如果你是使用的是HTTP1.1,这个版本下默认的方式是keep-alive,这时候TCP是不关闭的,如果在1.0版本下有keep-alive关键字也是不能进行关闭的。

5.解析HTML
  当浏览器收到HTML之后会对其进行解析,在这个过程中可能这个HTML页面引用了大量的js、css、图片等文件,这些资源可能在刚刚的服务器上也可能在其他的服务器上,这时候浏览器就会和上边步骤一样去请求这些资源,如果需要下载的资源太多,浏览器会同时创建多个TCP链接去获取资源,但是同一时间对同一域名下请求数量也不能过多,不然服务器访问量过大,难以承受负载,这时候浏览器就要对其进行控制,例如在chrome浏览器HTTP1.1版本下同时允许最多创建六个TCP链接,在服务器发送这些js、css文件的时候通常会告诉浏览器他什么时候会过期,浏览器就可以把这些文件缓存到本地,在这些文件还没有过期之前就可以直接从缓存中进行访问。
6.断开TCP连接
  当我们数据传输结束的时候,我们就可以断开TCP连接。四次握手
这时候我们的网页就完整的展现在我们的浏览器上了。

浏览器上请求URL的全部过程相关推荐

  1. 浏览器点击URL的响应过程

    原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者,你一定会对网络应用如何工作有 ...

  2. java 隐藏地址栏参数_要想在浏览器的地址栏上的URL中隐藏传输的参数,需要将form标签的method属性值设置为( )。 (5.0分)_学小易找答案...

    [填空题]若在JSP页面的不同作用域中有相同名称的对象,且EL表达式中又省略了相应的作用域类型名,则系统将会按照 . . . 的先后顺序查找相应对象. (20.0分) [简答题]AJAX异步请求过程中 ...

  3. 浏览器从输入URL到页面渲染过程 —— 浏览器的进程与线程

    之前我有总结过一篇经典面试题:浏览器从输入URL到页面渲染过程,接下里我将对某些知识点进行更细致的解析. 浏览器从输入URL到页面渲染过程 系列文章: (二):浏览器从输入URL到页面渲染过程 --页 ...

  4. 从浏览器地址栏输入url到请求返回发生了什么(深问)

    问题: 从浏览器地址栏输入url到请求返回发生了什么 你一看这种烂掉牙的问题,小case,但996面试大佬由此延展的问题已经远远超越了这个问题本身了,不信你就接着看. 我回答了首先会进行 url 解析 ...

  5. 前端开发就从认识浏览器开始 - 浏览器处理请求的过程

    既然是做前端开发的,打交道最多的就是浏览器,如果我们对浏览器的工作方式.处理任务.工作原理.相关组成部分有更多的了解, 会不会有助于我们的前端技术水平提高呢? 答案是肯定的. 我们就从当我们在浏览器地 ...

  6. 前端经典面试题:在浏览器从输入 URL 到页面加载显示完成的过程?从输入URL到页面加载发生了什么?

    总体来说分为以下几个过程: DNS解析 TCP连接 发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器解析渲染页面 连接结束 正文之前:(可以跳过) 在讨论点击URL后会发生什么之前,我们必须 ...

  7. 浏览器发起请求到服务器处理请求的过程

    前言问题:为什么很多站点第二次打开速度会很快? 前面我们已经说了tcp的一些流程,而http协议是建立在tcp协议基础之上的 http是一种无状态的丶允许浏览器向允许浏览器向服务器获取资源的协议,是W ...

  8. 【重难点】【计算机网络 01】OSI 七层模型和 TCP/IP 四层模型、IP 地址分为哪几类、ping 的原理、从浏览器地址栏输入 URL 到显示网页的过程、什么是 socket

    [重难点][计算机网络 01]OSI 七层模型和 TCP/IP 四层模型.IP 地址分为哪几类.ping 的原理.从浏览器地址栏输入 URL 到显示网页的过程.什么是 socket 文章目录 [重难点 ...

  9. 浏览器从输入URL到页面渲染过程 ——页面渲染流程

    之前我有总结过一篇经典面试题:浏览器从输入URL到页面渲染过程 ,接下里我将对某些知识点进行更细致的解析. 浏览器从输入URL到页面渲染过程 系列文章: (一):浏览器从输入URL到页面渲染过程 -- ...

最新文章

  1. 遍历百万级Redis的键值的大结局
  2. 计算机主板等级指标,转载一篇主板文章,教你认识三大厂主板分级
  3. 操作系统 课堂练习题02【8道 经典题目】
  4. HarmonyOS之深入解析NFC的功能和使用
  5. CRM product ID format相关配置
  6. SharePoint 跨域还原网站一则
  7. [SDOI2010]代码拍卖会
  8. bzoj 1207: [HNOI2004]打鼹鼠【dp】
  9. 安装VMware出现Error 1406:could not write value installpath to key的解决办法
  10. 彩色电视制式与色度解码电路
  11. dede后台系统基本参数空白怎么办
  12. android模拟qq进场动画,Android用ViewPager仿QQ实现多页面滑动及动画效果
  13. java实现excel转pdf_java实现excel转pdf(poi+itext)
  14. 杭电ACM 2000-2099 100道题 详细解题报告出炉
  15. 如何在outlook里面撤回邮件?邮件撤回成功后对方还能不能看到?
  16. 为什么要学习西方文化
  17. 如何成为Web开发人员—编写第一个Web应用程序
  18. log4j配置详解(非常详细转载)
  19. 容器技术在企业落地的最佳实践
  20. Istio,下一个Kubernetes?

热门文章

  1. 前端学习(2176):vue-router的路由的嵌套使用
  2. “约见”面试官系列之常见面试题第二十六篇之vue-router的hash和history(建议收藏)
  3. 前端学习(1496):watch使用场景
  4. elementui表格-改变某一列的样式
  5. js获取当前时间(昨天、今天、明天)
  6. CSS3属性之text-indent文本缩进使用详解
  7. Linux:建立内核代码树
  8. codesys中打开linux端的串口_CODESYS版本3.5 SP14 Patch 3发布
  9. 小程序实现无限瀑布流
  10. 网络通信中TCP出现的黏包以及解决方法 socket 模拟黏包