浏览器访问一个网页的过程是什么?

2020-04-14 15:51发布

4条回答
草莓小甜甜
2楼 · 2020-04-14 15:52


  1. dns解析域名

  •     dns解析域名的过程是这样的:

  • DNS

  • 作用:将url解析为ip地址

  • 第一步:检查DNS缓存,如果之前登陆过这个网站,那么DNS缓存中就会存有该链接对应的IP地址。

  • 第二步:dns缓存中没有找到的话,借给本地dns发送一个查询请求

  • 第三步:本地dns服务器向根dns服务器发送查询请求(根dns服务器是域名解析的起点)

  • 第四步:根dns服务器告诉本地dns服务器,一级dns服务器是谁。

  • 第五步:本地dns向一级dns服务器发送查询请求

  • 第六步:一级dns返回权威dns服务器的地址

  • 第七步:权威dns服务器告诉本地dns服务器最终的ip地址

  • 查询方式

  • 递归查询(传递和回归):浏览器与本地dns服务器直接按大的查询

  • 迭代查询(类似for):本地dns向其他dns之间的通信就是迭代查询


  • 在本地dns服务器与其他dns服务器之间的通信用到的是udp协议,过程如下

  • dns报文发送给运输层udp协议单元

  • udp协议单元将数据封装成udp数据报(udp面向报文),传送给网络层的ip协议单元

  • 网络层ip协议单元将数据封装成ip数据包,通过arp协议找到目的ip对应的mac地址

  • arp协议过程如下:

  • ARP协议(网络层)

  • 地址解析协议 ARP 作用

  • 从网络层使用的 IP 地址,解析出在数据链路层使用的硬件地址

  • ARP 过程

  • 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据包时,就先在其 ARP 高速缓存中查看有无主机B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。如没有, ARP 进程在本局域网上广播发送一个 ARP 请求分组。主机 B 单播发送一个 ARP 响应分组给主机 A,其他主机不会理睬这个请求分组,主机 A 将得到的 IP 地址和路由的下一跳硬件地址写入 ARP 高速缓存

  • ARP 高速缓存的作用

  • 存放最近获得的 IP 地址到 MAC 地址的绑定,以减少 ARP 广播的数量


  • dns请求到达数据链路层协议单元,数据链路层协议单元解析数据帧,将ip数据包传递给网络层ip协议单元

  • ip协议单元解析数据包,将内部的udp数据报传给运输层协议单元

  • udp协议单元解析数据报,将内部的dns报文传给dns服务单元dns解析域名

  • 2.三次握手建立tcp连接

    •        发送和接收数据(http)

    •         浏览器像域名发出http请求报文

    •         服务器接收并返回返回http响

    • 3.四次挥手断开tcp连接

    • 总结:dns:udp http:tcp ip层到数据链路层(arp)


    小鲸鱼
    3楼 · 2020-04-14 16:56

    网页经过HTTP协议通过网线传给你的网卡,网卡卡接收数据处理后传给南桥,南桥传给北桥,北桥传给内存,内存给处理器处理,传给显卡,显卡给显示器。
    打开网页的过程就是你的电脑从服务器读取网页数据完成后,由你电脑上的浏览器解析并显示出来。
    这个过程中就会产生一些临时文件,比如cookie和网页的缓存。
    这些临时文件会在一段时间后过期或者浏览器关闭后自动删除。

    星期八
    4楼 · 2020-04-15 10:41

    输入url后,首先需要找到这个url域名的服务器ip,为了寻找这个ip,浏览器首先会寻找缓存,查看缓存中是否有记录,缓存的查找记录为:浏览器缓存-》系统缓存-》路由器缓存,缓存中没有则查找系统的hosts文件中是否有记录,如果没有则查询DNS服务器,得到服务器的ip地址后,浏览器根据这个ip以及相应的端口号,构造一个http请求,这个请求报文会包括这次请求的信息,主要是请求方法,请求说明和请求附带的数据,并将这个http请求封装在一个tcp包中,这个tcp包会依次经过传输层,网络层,数据链路层,物理层到达服务器,服务器解析这个请求来作出响应,返回相应的html给浏览器,因为html是一个树形结构,浏览器根据这个html来构建DOM树,在dom树的构建过程中如果遇到JS脚本和外部JS连接,则会停止构建DOM树来执行和下载相应的代码,这会造成阻塞,这就是为什么推荐JS代码应该放在html代码的后面,之后根据外部央视,内部央视,内联样式构建一个CSS对象模型树CSSOM树,构建完成后和DOM树合并为渲染树,这里主要做的是排除非视觉节点,比如script,meta标签和排除display为none的节点,之后进行布局,布局主要是确定各个元素的位置和尺寸,之后是渲染页面,因为html文件中会含有图片,视频,音频等资源,在解析DOM的过程中,遇到这些都会进行并行下载,浏览器对每个域的并行下载数量有一定的限制,一般是4-6个,当然在这些所有的请求中我们还需要关注的就是缓存,缓存一般通过Cache-Control、Last-Modify、Expires等首部字段控制。 Cache-Control和Expires的区别在于Cache-Control使用相对时间,Expires使用的是基于服务器 端的绝对时间,因为存在时差问题,一般采用Cache-Control,在请求这些有设置了缓存的数据时,会先 查看是否过期,如果没有过期则直接使用本地缓存,过期则请求并在服务器校验文件是否修改,如果上一次 响应设置了ETag值会在这次请求的时候作为If-None-Match的值交给服务器校验,如果一致,继续校验 Last-Modified,没有设置ETag则直接验证Last-Modified,再决定是否返回304

    web-天佑
    5楼 · 2020-04-17 18:34
    1. Chrome搜索自身的DNS缓存

    2. 搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)

    3. 读取本地HOST文件

    4. 浏览器发起一个DNS的一个系统调用

      • 运营商服务器把结果返回操作系统内核同时缓存起来

      • 操作系统内核把结果返回浏览器

      • 最终浏览器拿到www.jianshu.com对应的IP地址

      • 宽带运营商服务器查看本身缓存

      • 运营商服务器发起一个迭代DNS解析的请求

    5. 浏览器获得域名对应的IP地址后,发起HTTP“三次握手”

    6. TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了。(使用了比如说,用HTTP的GET方法请求一个跟域名,协议可以采用HTTP1.0。)

    7. 服务器端接受到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器。如果是慕课网的页面就会把完整的HTML页面代码返回给浏览器。

    8. 浏览器拿到了简书网的完整的HTML页面代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,他们同样也是一个个HTTP请求都需要经过上面的主要的七个步骤。

    9. 浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。

    相关问题推荐

    • 回答 14

      1.重构响应式系统,使用Proxy替换Object.defineProperty,使用Proxy优势:•可直接监听数组类型的数据变化•监听的目标为对象本身,不需要像Object.defineProperty一样遍历每个属性,有一定的性能提升•可拦截apply、ownKeys、has等13种方法,而Object.define...

    • 回答 12

      vue页面跳转后返回原页面初始位置        vue页面跳转到新页面之后,再由新页面返回到原页面时候若想返回调出原页面的初始位置,怎么来解决这个问题呢?首先我们应该在跳出页面时候记录下跳出的scrollY,返回原页面的时候在设置返回位置为记录下的scrolly...

    • MVVM和MVM的不同?2020-05-09 15:51
      回答 9

      这个问题建议你系统了解下MVC→MVP→MVVM的进化历程。(1)首先说下MVC    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。MVC开始是存在于桌面程序中,使用MVC的目的是将M和V的实现代码分离。从图里可以看...

    • 回答 13

      目前,对于SEO支持比较好的项目方案是采用服务端渲染。所以如果项目有SEO需求,那么比较好的方案是服务端渲染。如果你已经采用了前后分离的单页项目,而你的网站内容不需要AJAX去获取内容和展示内容,那么可以试试 prerender-spa-plugin 这个插件,这个插件是...

    • vue和bootstrap的区别2021-10-14 11:13
      回答 19

      Bootstrap和vue不是一个层级的东西.Bootstrap是在jquery时代的UI组件库,而且Bootstrap大部分组件是依赖css的,依赖jQuery的组件主要是有交互的弹窗组件、下拉菜单等

    • 回答 13

      首先你需要引入另一个界面,然后通过$refs.refName的方式调用弹框的方法后者直接把弹框的属性置成true。注意需要另一个页面渲染完成后才能用【$refs.refName】

    • 回答 16

      是的,前端不会Vue根本就没必要再聊下去了

    • 回答 7

      这里有一篇文章可以帮助你https://blog.csdn.net/qq_40282732/article/details/105962708

    • 回答 5

      内部图表大小是与div容器大小位置相关的,如果想调整图表大小位置,调整div的属性就可以。如果是想调整图表与div间上下左右留白,则设置grid属性就可以。

    • 回答 7

      使用 /deep/ 注意:使用 cass 和 less 只能使用 /deep/ 这个方法

    • 回答 4

      创建icons/svg文件夹将svg文件放在该文件夹下面在components文件夹中创建svgiconfont.vue文件文件内容:        [removed]  import '@/icons'  export default {    name: 'svg-icon',    props: {      iconClass: {      ...

    • 回答 3

      引用数据类型数组的元素是对象引用,没有实际的值,需要给它实例。例如date days = new date[5];days[0]  = new date(2000,12,3)每一个days都要去分配。而基础类型都有默认初始值。

    • 回答 5

      计算属性与响应式并不冲突对立的存在,计算属性往往是用于数据的聚合或者离散,数据响应式的话就是视图响应数据变动(先容我装个逼)在vue中就是通过watcher调用一次实例对象中data的数据(当然这层数据也会做一层映射,映射到实例的属性中)在数据的defineOb...

    • 回答 3

      Vue中有一个自带的transition组件,就是用来实现过渡效果的,具体怎么使用呢,很简单,其实就两个步骤:①用transition组件,把要做过渡效果的元素包起来②写上相应的过渡效果的css是不是很简单,比把大象装冰箱还简单。然而,并没有,在这两个步骤中,我们要...

    没有解决我的问题,去提问