2020-04-14 15:51发布
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)
网页经过HTTP协议通过网线传给你的网卡知,网卡卡接收数据处理后传给南桥,南桥传给北桥,北桥传给内存,内道存给处理器处理,传给显卡,显卡给显示器。打开网页的过程就是你的电脑从服务器读取网页数内据完成后,由你电脑上的浏览器解析并显示出来。这个过程中就会产生一些临时文件,比如cookie和网页的缓存。这些临时文件会在一段时间后过期或者浏览器关闭后自容动删除。
输入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
Chrome搜索自身的DNS缓存
搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)
读取本地HOST文件
浏览器发起一个DNS的一个系统调用
运营商服务器把结果返回操作系统内核同时缓存起来
操作系统内核把结果返回浏览器
最终浏览器拿到www.jianshu.com对应的IP地址
宽带运营商服务器查看本身缓存
运营商服务器发起一个迭代DNS解析的请求
浏览器获得域名对应的IP地址后,发起HTTP“三次握手”
TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了。(使用了比如说,用HTTP的GET方法请求一个跟域名,协议可以采用HTTP1.0。)
服务器端接受到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器。如果是慕课网的页面就会把完整的HTML页面代码返回给浏览器。
浏览器拿到了简书网的完整的HTML页面代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,他们同样也是一个个HTTP请求都需要经过上面的主要的七个步骤。
浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。
1.重构响应式系统,使用Proxy替换Object.defineProperty,使用Proxy优势:•可直接监听数组类型的数据变化•监听的目标为对象本身,不需要像Object.defineProperty一样遍历每个属性,有一定的性能提升•可拦截apply、ownKeys、has等13种方法,而Object.define...
vue页面跳转后返回原页面初始位置 vue页面跳转到新页面之后,再由新页面返回到原页面时候若想返回调出原页面的初始位置,怎么来解决这个问题呢?首先我们应该在跳出页面时候记录下跳出的scrollY,返回原页面的时候在设置返回位置为记录下的scrolly...
这个问题建议你系统了解下MVC→MVP→MVVM的进化历程。(1)首先说下MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。MVC开始是存在于桌面程序中,使用MVC的目的是将M和V的实现代码分离。从图里可以看...
目前,对于SEO支持比较好的项目方案是采用服务端渲染。所以如果项目有SEO需求,那么比较好的方案是服务端渲染。如果你已经采用了前后分离的单页项目,而你的网站内容不需要AJAX去获取内容和展示内容,那么可以试试 prerender-spa-plugin 这个插件,这个插件是...
Bootstrap和vue不是一个层级的东西.Bootstrap是在jquery时代的UI组件库,而且Bootstrap大部分组件是依赖css的,依赖jQuery的组件主要是有交互的弹窗组件、下拉菜单等
首先你需要引入另一个界面,然后通过$refs.refName的方式调用弹框的方法后者直接把弹框的属性置成true。注意需要另一个页面渲染完成后才能用【$refs.refName】
是的,前端不会Vue根本就没必要再聊下去了
这里有一篇文章可以帮助你https://blog.csdn.net/qq_40282732/article/details/105962708
内部图表大小是与div容器大小位置相关的,如果想调整图表大小位置,调整div的属性就可以。如果是想调整图表与div间上下左右留白,则设置grid属性就可以。
使用 /deep/ 注意:使用 cass 和 less 只能使用 /deep/ 这个方法
创建icons/svg文件夹将svg文件放在该文件夹下面在components文件夹中创建svgiconfont.vue文件文件内容: [removed] import '@/icons' export default { name: 'svg-icon', props: { iconClass: { ...
引用数据类型数组的元素是对象引用,没有实际的值,需要给它实例。例如date days = new date[5];days[0] = new date(2000,12,3)每一个days都要去分配。而基础类型都有默认初始值。
计算属性与响应式并不冲突对立的存在,计算属性往往是用于数据的聚合或者离散,数据响应式的话就是视图响应数据变动(先容我装个逼)在vue中就是通过watcher调用一次实例对象中data的数据(当然这层数据也会做一层映射,映射到实例的属性中)在数据的defineOb...
Vue中有一个自带的transition组件,就是用来实现过渡效果的,具体怎么使用呢,很简单,其实就两个步骤:①用transition组件,把要做过渡效果的元素包起来②写上相应的过渡效果的css是不是很简单,比把大象装冰箱还简单。然而,并没有,在这两个步骤中,我们要...
最多设置5个标签!
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)
网页经过HTTP协议通过网线传给你的网卡知,网卡卡接收数据处理后传给南桥,南桥传给北桥,北桥传给内存,内道存给处理器处理,传给显卡,显卡给显示器。
打开网页的过程就是你的电脑从服务器读取网页数内据完成后,由你电脑上的浏览器解析并显示出来。
这个过程中就会产生一些临时文件,比如cookie和网页的缓存。
这些临时文件会在一段时间后过期或者浏览器关闭后自容动删除。
输入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
Chrome搜索自身的DNS缓存
搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)
读取本地HOST文件
浏览器发起一个DNS的一个系统调用
运营商服务器把结果返回操作系统内核同时缓存起来
操作系统内核把结果返回浏览器
最终浏览器拿到www.jianshu.com对应的IP地址
宽带运营商服务器查看本身缓存
运营商服务器发起一个迭代DNS解析的请求
浏览器获得域名对应的IP地址后,发起HTTP“三次握手”
TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了。(使用了比如说,用HTTP的GET方法请求一个跟域名,协议可以采用HTTP1.0。)
服务器端接受到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器。如果是慕课网的页面就会把完整的HTML页面代码返回给浏览器。
浏览器拿到了简书网的完整的HTML页面代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,他们同样也是一个个HTTP请求都需要经过上面的主要的七个步骤。
浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。
相关问题推荐
1.重构响应式系统,使用Proxy替换Object.defineProperty,使用Proxy优势:•可直接监听数组类型的数据变化•监听的目标为对象本身,不需要像Object.defineProperty一样遍历每个属性,有一定的性能提升•可拦截apply、ownKeys、has等13种方法,而Object.define...
vue页面跳转后返回原页面初始位置 vue页面跳转到新页面之后,再由新页面返回到原页面时候若想返回调出原页面的初始位置,怎么来解决这个问题呢?首先我们应该在跳出页面时候记录下跳出的scrollY,返回原页面的时候在设置返回位置为记录下的scrolly...
这个问题建议你系统了解下MVC→MVP→MVVM的进化历程。(1)首先说下MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。MVC开始是存在于桌面程序中,使用MVC的目的是将M和V的实现代码分离。从图里可以看...
目前,对于SEO支持比较好的项目方案是采用服务端渲染。所以如果项目有SEO需求,那么比较好的方案是服务端渲染。如果你已经采用了前后分离的单页项目,而你的网站内容不需要AJAX去获取内容和展示内容,那么可以试试 prerender-spa-plugin 这个插件,这个插件是...
Bootstrap和vue不是一个层级的东西.Bootstrap是在jquery时代的UI组件库,而且Bootstrap大部分组件是依赖css的,依赖jQuery的组件主要是有交互的弹窗组件、下拉菜单等
首先你需要引入另一个界面,然后通过$refs.refName的方式调用弹框的方法后者直接把弹框的属性置成true。注意需要另一个页面渲染完成后才能用【$refs.refName】
是的,前端不会Vue根本就没必要再聊下去了
这里有一篇文章可以帮助你https://blog.csdn.net/qq_40282732/article/details/105962708
内部图表大小是与div容器大小位置相关的,如果想调整图表大小位置,调整div的属性就可以。如果是想调整图表与div间上下左右留白,则设置grid属性就可以。
使用 /deep/ 注意:使用 cass 和 less 只能使用 /deep/ 这个方法
创建icons/svg文件夹将svg文件放在该文件夹下面在components文件夹中创建svgiconfont.vue文件文件内容: [removed] import '@/icons' export default { name: 'svg-icon', props: { iconClass: { ...
引用数据类型数组的元素是对象引用,没有实际的值,需要给它实例。例如date days = new date[5];days[0] = new date(2000,12,3)每一个days都要去分配。而基础类型都有默认初始值。
计算属性与响应式并不冲突对立的存在,计算属性往往是用于数据的聚合或者离散,数据响应式的话就是视图响应数据变动(先容我装个逼)在vue中就是通过watcher调用一次实例对象中data的数据(当然这层数据也会做一层映射,映射到实例的属性中)在数据的defineOb...
Vue中有一个自带的transition组件,就是用来实现过渡效果的,具体怎么使用呢,很简单,其实就两个步骤:①用transition组件,把要做过渡效果的元素包起来②写上相应的过渡效果的css是不是很简单,比把大象装冰箱还简单。然而,并没有,在这两个步骤中,我们要...