当前位置:   article > 正文

浏览器输入一个地址到请求返回,经历的过程

浏览器输入一个地址

浏览器输入一个地址到请求返回,经历的过程

URL输入

  • 我们在地址栏输入网址后敲下回车键,浏览器会对输入的信息进行判断,比如说检查输入的内容url链接,是否符合url且完整,如果不完整,浏览器猜测性的补齐前缀或者后缀,如果不符合url,则将输入的内容作为搜索条件搜索

DNS域名解析

  • 因为浏览器不能直接通过域名找到对应的服务器ip地址,所以需要dns解析,查到对应的ip地址进行访问
  • 首先用户在浏览器中输入域名,操作系统会依次检查浏览器的缓存和本地的hosts文件中,是否有这个网址记录,有点话返回解析结果,完成域名解析。无则接着使用tcp/ip参数中设置的dns服务进行查询,如果要查询的域名包含在本地配置的区域资源中,有点话返回解析结果,完成域名解析。无则接着检查本地dns服务器是否缓存有该网址记录。有点话返回解析结果,完成域名解析
  • 最后还没有的话,服务器会发送查询报文到根dns服务器,根dns服务器收到请求后,返回顶级域dns服务器地址。然后本地dns服务器在发送查询报文到顶级域dns服务器。顶级域dns服务器收到请求后返回权威dns服务器的地址。然后本地dns服务器在发送查询报文到权威dns服务器。那么权威dns服务器收到请求后,返回最终的ip地址,完成域名的解析。
  • 域名解析图解全过程(新手必看超详细)

蛋蛋老师bilibili视频详解dns域名解析
在这里插入图片描述

建立TCP连接

在这里插入图片描述

  • 当浏览器获取到服务器的ip地址后,浏览器会用一个随机的端口号向服务器80端口发起tcp链接,请求。

  • 三次握手(三次握手的机制是为了保证能建立一个安全可靠的连接)
    1.客户端发送syn数据包向服务端发起请求链接
    2.当服务端收到这个报文之后就知道客户端要和我建立一个新的连接,于是服务端就向客户端发送syn和ack确认消息包,并发起对客服端端连接请求
    以上两次握手之后,对于客户端而言:已经明确了我既能给服务端成功发消息,也能成功收到服务端的响应。但是对于服务端而言:两次握手是不够的,因为到目前为止,服务端只知道一件事,客户端发给我的消息我能收到,但是我响应给客户端的消息,客户端能不能收到我是不知道的。所以,还需要进行第三次握手
    3.客户端收到服务端发送的ack确认响应报文之后,还要给服务端进行回应,此时才能百分百确认建立连接
    通过三次握手,保证客户端知道两方面都可以进行,服务端也知道两方面都可以进行(双工)

  • 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步 序列编号(Synchronize Sequence Numbers)。 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK 包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进 入ESTABLISHED(TCP连接成功)状态,完成三次握手。

发送HTTP/HTTPS请求

  • 建立链接后,就可以通过http进行数据的传输了。如果使用了https,会在tcp与http之间多添加一层协议,作为加密及认证的服务。https使用ssl和tls协议保障了信息的安全。ssl协议的作用是认证客户端和服务器,确保数据发送到正确的客户端和服务器,加密数据,防止数据中途被窃取。维护数据的完整性,确保数据在传输过程中啊不被改变。tls协议的作用是用于在两个通通信应用程序之间提供保密性和数据完整性。tls协议由两层组成,tls记录协议和tls握手协议。

服务器处理相关请求,并返回响应请求

  • 当浏览器到web服务器的链接建立后,浏览器会发送一个初始的http get请求。请求目标通常是一个html文件。服务器收到请求后,将发回一个http的响应报文,内容包括相关的响应头和html正文。

浏览器解析渲染页面

  • 不同的浏览器引擎渲染过程是不太一样的。我们以谷歌浏览器为例来介绍一下渲染的过程啊,首先处理html的标记,并构建dom树。第二步处理css标记,并构建css dom树。第三步将dom树以css dom数合并为一棵渲染树。第四步呃,根据渲染树来布局,以计算每个节点的几何信息。第五步,将各个节点渲染到屏幕上,这样就完成了页面的渲染。现在的浏览器页面为了优化请求的耗时,默认都会开启持久链接。

HTTP请求结束,断开TCP连接

  • 也就是说标签页关闭的时候,tcp链接才会关闭。这个关闭的过程呢就是四次挥手。
  • 断开双向通道:中间的两步不能合并(需要有检查的时间)

四次挥手

  • 四次挥手机制也是由客户端首先发起的,客户端会发送一个报文。当服务端收到这个报文之后,就知道了客户端想要和我断开连接。但是此时服务端不一定能做好准备,因为客户端发起断开连接的消息的时候,对于服务端而言,它极可能有未发送完的消息,它还要继续发送。所以此时对于服务端只能进行一个消息确认,就是告诉客户端我知道你要跟我断开连接了,但是我还没有做好准备,你需要等我一会。稍过片刻,服务端会继续发送一个断开连接的报文。这个报文表示服务端已经做好了要断开连接的准备。客户端收到后继续发送一个消息确认的报文。通过以上四次握手,不管是客户端还是服务端,都已经做好了要断开连接的准备,连接就可以被断开了。

  • 因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文 是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK 报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文, 因此不能一起发送。
    在这里插入图片描述

b站相关优秀老师详解视频
蛋蛋老师详解浏览器输入一个地址到请求返回,经历的过程
小邱老师详解浏览器输入一个地址到请求返回,经历的过程

HTTP/HTTPS的区别

  • HTTP协议是超文本传输协议,是一个基于请求响应,无状态的,作用于tcp/ip应用层的协议之上的协议,它规定了浏览器与服务端之间数据交互的格式设计,HTTP的初衷是为了提供一种发布和接收HTML页面的方法。绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。以明文的方式传输内容,数据都是未加密的,安全性较差,端口80。

  • https协议是ssl+http协议构建的加密传输协议, 是一种通过计算机网络进行安全通信的传输协议,数据传输过程是加密的,安全性较好。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。端口443

  • HTTP特点:
    (1)无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
    (2)无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
    (3)基于请求和响应:基本的特性,由客户端发起请求,服务端响应
    (4)简单快速、灵活
    (5)通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

  • HTTPS特点:
    (1)基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
    (2)内容加密:采用混合加密技术,中间者无法直接查看明文内容
    (3)验证身份:通过证书认证客户端访问的是自己的服务器
    (4)保护数据完整性:防止传输的内容被中间人冒充或者篡改

    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/491743
    推荐阅读
    相关标签
      

    闽ICP备14008679号