从输入url到显示页面,都经历了什么?

摘要:
当我们打开浏览器访问网站时会发生什么?步骤1:我们将在浏览器地址栏中输入url。步骤2:浏览器将首先查看浏览器缓存系统缓存-˃路由器缓存。如果缓存包含以前访问的数据,则会直接显示在屏幕上;如果没有,继续执行第三步。步骤3:在发送http请求之前,您需要解析域名[一个可以将域名和IP地址相互映射的分布式数据库],并解析以获得相应的IP地址。步骤4:浏览器启动与服务器的TCP连接,并与浏览器建立三次TCP握手。(TCP是传输控制协议。

我们在打开浏览器访问一个网站时 究竟都发生了什么

  • 第一步:我们会在浏览器地址栏中输入一个url

  • 第二步:浏览器会先查看浏览器缓存
    系统缓存 -> 路由器缓存

如果缓存中存有先前访问过的数据,则会直接显示在屏幕中;没有的话,则进行第三步操作
  • 第三步:在发送http请求前,需要域名解析(DNS解析)【DNS域名系统】[可以将域名和IP地址相互映射的一个分布式数据库],解析获取相应的IP地址

  • 第四步:浏览器向服务器发起TCP连接,与浏览器建立TCP三次握手。(TCP即传输控制协议。TCP连接是互联网连接协议集的一种)

三次握手:(TCP建立连接的过程,称为三次握手)
      第一次,客户端向服务器发送SYN同步报文段,请求建立连接

      第二次,服务器确认收到客户端的连接请求,并向客户端发送SYN同步报文,表示要向客户端建立连接

      第三次,客户端收到服务器端的确认请求后,处于建立连接状态,向服务器发送确认报文

客户端是在收到确认请求后,先建立连接
服务器是在收到最后客户端的确认后,建立连接
发起连接请求的一定是客户端

注意:
      两次握手的话,服务器方不确定客户端有没有收到报文,中途可能导致报文丢失而服务器不知,客户端可能就会不断发送报文,而服务器处理连接的数量是有限的,此时建立的连接会消耗大量的资源,可能会导致服务器崩溃

有连接就会有断开,那么连接是三次握手,断开就是四次挥手

什么是四次挥手呢?
      第一次,A端像B端发送FIN结束报文段,准备关闭连接

      第二次,B端确认A端的FIN,表示自己已经收到对方关闭连接的请求中间这段时间,A端停止向B端发送数据,但是B端可以向A端发送数据,要将自己未处理完任务处理完

      第三次,B端向A端发送FIN结束报文段,准备关闭连接

      第四次,A端确认B端的FIN,进入TIME_WAIT状态,此时A端进程已经退出,但是连接还在

      当B端收到A端的ACK之后,先断开连接
      当A端等待2 MSL之后,确认的B端接收到ACK后,再断开连接
      发起断开连接请求的一端最后要进入有一个TIME_WAIT状态
      发起连接请求的可以是客户端也可以是服务器端
  • 第五步:握手成功后,浏览器向服务器发送 http 请求,请求数据包

  • 第六步:服务器处理收到的请求,将数据返回至浏览器

  • 第七步:浏览器收到 HTTP 响应

  • 第八步,读取页面内容,浏览器渲染,解析 HTML 源码

  • 第九步:生成DOM树,解析CSS样式,js交互

  • 第十步:客户端和服务器交互

  • 第十一步:Ajax查询

免责声明:文章转载自《从输入url到显示页面,都经历了什么?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux下状态查看相关命令如何使用AE来制作烟雾粒子特效下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

干货 | 10分钟玩转PWA

关于PWA PWA(Progressive Web App), 即渐进式web应用。PWA本质上是web应用,目的是通过多项新技术,在安全、性能、体验等方面给用户原生应用的体验。而且无需像原生应用那样繁琐的下载、安装、升级等操作。 这里解释下概念中的“渐进式”,意思是这个web应用还在不断地进步中。因为目前而言,PWA还没有成熟到一蹴而就的程度,想在安全、...

【WPF学习】第五十二章 动画性能

  通常,为用户界面应用动画只不过是创建并配置正确的动画和故事板对象。但在其他情况下,特别是同时发生多个动画时,可能需要更加关注性能。特定的效果更可能导致这些问题——例如,那些涉及视频、大位图以及多层透明等的效果通常需要占用更多CPU开销。如果不谨慎实现这类效果,运行它们使可能造成明显抖动,或者会从其他同时运行的应用程序抢占CPU时间。   幸运的是,WP...

Django使用redis实现缓存

实现缓存的方式,有多种:本地内存缓存,数据库缓存,文件系统缓存。这里介绍使用Redis数据库进行缓存。 配置 1 CACHES ={ 2 "default": { 3 "BACKEND": "django_redis.cache.RedisCache", 4 "LOCATION": "redis://127.0.0.1:6379/1", 5 "OPTION...

Google WebRtc Android 使用详解(包括客户端和服务端代码)

转自:https://zhuanlan.zhihu.com/p/82446482 1、Google Webrtc介绍 WebRTC(Web Real-Time Communication)实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (...

负载均衡介绍

四层和七层负载均衡的区别 (一)简单理解四层和七层负载均衡: ① 七层就是基于URL或主机名等应用层信息的负载均衡,接收请求,然后再分配到真实的服务器; 四层就是基于IP+端口的负载均衡,接收请求,然后再分配到真实的服务器; 三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址; 二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真...

五:HttpServletResponse对象

一、HttpServletResponse对象介绍 HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。查看HttpServletResponse的API,可以看到这些相关的方法。 1.1、负责向客户端(浏览器)发送数据的相关方法    1.2、负责向客户端(浏览器)发送响应头的相...