前端网络总结

参考:浏览器工作原理

1. DNS

DNS(Domain Name System)是域名“系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。

向浏览器的地址栏中输入一个URL按回车后:
看浏览器缓存,如果浏览器不认识看本机host,然后是家里的路由器有没有缓存映射,如果都没有,有可能访问上级路由城市路由,继续向上级找。

访问网站输入网站域名,DNS服务器就解析我们的域名为ip。这样我们实际访问的就是对应的ip地址。抽象点DNS就是 一个记录ip地址的超级分布式数据库。

因为我们上网使用的UDP/TCP,UDP数据往往没有保障,但速度快,通常用于查询和响应,TCP由于多次验证,传输有保证,但速度慢,多用于主服务器和从服务器之间的传送。
因此我们DNS主要通过UDP。

hosts
在DNS系统之前,对应ip都是保存在hosts文件之中,现在系统仍然保留它。
实际通过浏览器访问,会先查询浏览器dns缓存,再查询hosts里面是否有记录。

2. http请求的具体过程

http请求经历了8个阶段如下

构建请求
查找缓存
准备 IP 和端口
等待 TCP 队列
建立 TCP 连接
发起 HTTP 请求(发送请求行,请求头)
服务器处理请求
服务器返回请求和断开连接

通俗点举个例子,如果我们输入搜索www.baidu.com会发生什么事情

1. 构建请求
首先,浏览器构建请求行信息(如下所示),构建好后,浏览器准备发起网络请求。

GET /index.html HTTP1.1

2. 查找缓存

在真正发起网络请求之前,浏览器会先在浏览器缓存(关于浏览器缓存忘了可以看我这篇浏览器缓存总结)中查询是否有要请求的文件。其中,浏览器缓存是一种在本地保存资源副本,以供下次请求时直接使用的技术。

当浏览器发现请求的资源已经在浏览器缓存中存有副本,它会拦截请求,返回该资源的副本,并直接结束请求,而不会再去源服务器重新下载。这样做的好处有:

缓解服务器端压力,提升性能(获取资源的耗时更短了);
对于网站来说,缓存是实现快速资源加载的重要组成部分。

当然,如果缓存查找失败,就会进入网络请求过程了。

3.准备 IP 地址和端口
浏览器使用 HTTP 协议作为应用层协议,用来封装请求的文本信息;并使用 TCP/IP 作传输层协议将它发到网络上,所以在 HTTP 工作开始之前,浏览器需要通过 TCP 与服务器建立连接。也就是说 HTTP 的内容是通过 TCP 的传输数据阶段来实现的

简单理解下:
浏览器会先建立tcp连接,发送http请求(请求行,请求头),然后服务器处理http请求,服务器响应(服务器回复相应行,响应头等),最后断开tcp连接。
TCP 连接的第一步就是需要准备 IP 地址和端口号!这俩怎么获取呢==>DNS会返回对应的ip,http默认端口号80

4.等待 TCP 队列
现在已经把端口和 IP 地址都准备好了,那么下一步建立 TCP 连接。
以Chrome浏览器为例,Chrome 有个机制,同一个域名同时最多只能建立 6 个 TCP 连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态,直至进行中的请求完成。
当然,如果当前请求数量少于 6,会直接进入下一步,建立 TCP 连接。

5. 建立 TCP 连接
排队等待结束之后,终于可以快乐地和服务器握手了,在 HTTP 工作开始之前,浏览器通过 TCP 与服务器建立连接。

这里详细理解一下三次握手

三次握手
客户端和服务端通信前要进行连接,“3次握手”的作用就是双方都能明确自己和对方的收、发能力是正常的。
第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。 从客户端的视角来看,我接到了服务端发送过来的响应数据包,说明服务端接收到了我在第一次握手时发送的网络包,并且成功发送了响应数据包,这就说明,服务端的接收、发送能力正常。而另一方面,我收到了服务端的响应数据包,说明我第一次发送的网络包成功到达服务端,这样,我自己的发送和接收能力也是正常的。
第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力,服务端的发送、接收能力是正常的。 第一、二次握手后,服务端并不知道客户端的接收能力以及自己的发送能力是否正常。而在第三次握手时,服务端收到了客户端对第二次握手作的回应。从服务端的角度,我在第二次握手时的响应数据发送出去了,客户端接收到了。所以,我的发送能力是正常的。而客户端的接收能力也是正常的。

经历了上面的三次握手过程,客户端和服务端都确认了自己的接收、发送能力是正常的。之后就可以正常通信了。

6. 发送 HTTP 请求

浏览器向服务器发起请求行:请求方法,请求URL HTTP协议版本
请求头:把浏览器的基础信息告诉服务器,比如包含了浏览器所使用的操作系统,浏览器的内核信息等,还有请求的域名信息,浏览器的Cookie信息等等。

7.服务器端处理HTTP请求流程
返回响应行,响应头,响应体。断开连接。

场景:我们在浏览器中输入www.xxx.com 但是打开的是www.yyy.com是为啥呀

我们输入www.xxx.com后,我们看看响应行返回的状态码301,状态301告诉浏览器,你需要重新转到另外一个网址,需要重定向的地址正式包含在响应头的Location字段中。接下来,浏览器获取Location字段中的地址,就会重新导航到www.yyy.com。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值