你好,欢迎访问我的博客!登录
当前位置:首页 - SEO资讯 - 正文 SEO教程学习网

浏览器输入网址后发生了什么?

2018-12-20SEO资讯seo学习网69°c
A+ A-

本文摘要:

1.DNS域名解析;

2.建立TCP连接;

3.发送HTTP请求;

4.服务器处理请求;

5.返回响应结果;

6.关闭TCP连接;

7.浏览器解析HTML;

8.浏览器布局渲染;

1.浏览器(客户端)进行地址解析,补全域名,然后DNS域名解析;

浏览器会对一些默认的东西进行补齐。例如:互联网url默认端口号为80,浏览器默认补齐功能会补齐协议http,有些还会直接在域名前面补上www。所以实际上,即使我们输入的是imooc.com,然而实际访问的却是http://www.imooc.com

dns解析分为以下几个步骤:

1、先查看浏览器dns缓存中是否有域名对应的ip。

2、如果没有,则查看操作系统dns缓存中是否有对应的ip(例如windows的hosts文件)。

3、依旧没有就对本地区的dns服务器发起请求。

4、如果还是没有,就直接到Root Server域名服务器请求解析。

>1<、DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;

>2<、全球只有十三台逻辑根服务器

浏览器输入网址后发生了什么?

2.通过ip寻址和arp,找到目标(服务器)地址,三次握手建立TCP连接;

ip协议在第三层互联网层(网络层),arp协议在第四层网络访问层(链路层)。第2步获取到了ip,此时直接通过ip寻址找到ip对应的服务器,然后通过arp协议找到服务器的mac地址。

ip寻址主要有两种方式,一种是同一网段,一种是不同网段。要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就在同一子网,否则,不在同一子网。arp就是地址转化协议,也就是把ip地址转化为mac地址。和dns很像,先查缓存,然后查路由器。

为什么有了ip地址,还要mac地址?这个问题很关键,就像是我有驾驶证了你非要让我提供身份证。这个涉及一些历史问题,因为一开始没有互联网的时候就只有mac地址,还不存在ip地址。后来互联网越来越大之后,发现mac地址找起来太麻烦,并且耗时也越来越久,就发明了ip地址。并且mac地址在一个局域网中还是很有用的,所以就两个一起存在了。

第三步我们找到了目标ip,并获得了服务器ip的mac地址。此时浏览器就会请求和服务器连接,用来传输数据。tcp 是稳定双向面向连接的,断开时也会分两边分别断开。面向连接不是说tcp一个双方一直开着的通道,而是维持一个连接的状态,让它看起来有连接。

浏览器输入网址后发生了什么?

上图也可以这么理解:

3.发送HTTP请求;等待响应

浏览器会对请求进行包装,包装成请求报文。请求报文的格式如下:

起始行:如 GET / HTTP/1.0 (请求的方法 请求的URL 请求所使用的协议)

头部信息:User-Agent Host等成对出现的值

主体:请求头部和主体之间有一个回车换行。如果是get请求,则没有主体部分,post请求有主体部分。

浏览器输入网址后发生了什么?

4.服务器处理请求;

浏览器请求报文到达服务器之后,服务器接口会对请求报文进行处理,执行接口对应的代码,处理完成后响应客户端。由于http是无状态的,正常情况下,客户端收到响应后就会直接断开连接,然后一次http事物就完成了。但是http1.0有一个keep-alive的请求字段,可以在一定时间内不断开连接(有时时间甚至很长)。http1.1直接就默认开启了keep-alive选项。这导致了一个后果是服务器已经处理完了请求,但是客户端不会主动断开连接,这就导致服务器资源一直被占用。这时服务器就不得不自己主动断开连接,而主动断开连接的一方会出现TIME_WAIT,占用连接池,这就是产生SYN Flood攻击的原因。

浏览器输入网址后发生了什么?

5.返回响应结果;

需要关注一个报文头--accept。accept代表发送端(客户端)希望接受的数据类型,这是浏览器自动封装的请求头。如果服务器返回的content-type是accept中的任何一个,浏览器都能解析,并直接展示在网页上。如果服务器返回的content-type是其他类型,此时浏览器有三种处理状态:

1、正常显示。例如返回类型为text/javascript,浏览器能直接处理并展示。

2、下载。例如返回类型为application/octet-stream(二进制流,不知道下载文件类型),这种浏览器不能直接处理的,会被下载。

3、报错。当我们返回一个字符串hello world,却使用text/xml,格式时,浏览器不能正确解析,就会报错,并把报错信息呈现在网页中。

浏览器能直接处理很多种格式,并直接呈现在网页中,并不限于accept中规定的字段。

浏览器输入网址后发生了什么?

6.关闭TCP连接;

浏览器输入网址后发生了什么?

上图可以这么理解:

客户端:“兄弟,我这边没数据要传了,咱关闭连接吧。”

服务端:“收到,我看看我这边有木有数据了。”

服务端:“兄弟,我这边也没数据要传你了,咱可以关闭连接了。”

客户端:“好嘞。”

7.浏览器解析HTML;

浏览器通过解析HTML,生成DOM树,解析CSS,生成CSS规则树,然后通过DOM树和CSS规则树生成渲染树。渲染树与DOM树不同,渲染树中并没有head、display为none等不必显示的节点。

8.浏览器布局渲染

浏览器会根据相应的content-type字段对响应字符串进行解析。能够解析并成功解析就显示,能够解析但解析错误就报错,不能解析就下载。由于浏览器采用至上而下的方式解析,所以会先解析html,直到遇到外部样式和外部脚本。这时会阻塞浏览器的解析,外部样式和外部脚本(在没有async、defer属性下)会并行加载,但是外部样式会阻塞外部脚本的执行,dom加载完毕,js脚本执行成功后dom树构建完成(DOMContentLoaded),之后就加载dom中引用的图片等静态资源。

html解析-<外部样式、脚本加载-<外部样式执行-<外部脚本执行-

总结一下:运维人员需要处理页面缓存、cdn及keep-alive引起的连接池占用等问题;后端人员需要处理代码逻辑、缓存、传输优化、报错等问题;前段人员需要做好前端性能优化和配合运维、后端做好借口调试,缓存处理等问题。所以无论是前端、后台、运维都应该很清楚整个流程中的每一步,才能在配合时,得心应手,才能在出现问题时,快速准确的定位问题解决问题,才能在需要优化时,迅速完整的给出方案。

  选择分享方式
未定义标签

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>


  用户登录