当前位置: 首页 > news >正文

面试题2:从浏览器输入一个URL,到最终展示前端页面这一过程,会发生什么?

这是一个高频的面试题目。
题目答案是开放性的,一般以后端开发的角度回答。
当地址栏输入一个 URL 后:

一、首先会进行 DNS 域名解析
DNS 域名解析:网络上的设备都是通过 IP 地址,作为身份标识的。但是由于点分十进制的 IP 地址 不好记,就会使用一串单词(域名),表示这个 IP 地址。就像是给这个 IP地址 起了一个 别名。

就像 github 的域名是 www.github.com,很好记,但是他的 IP 地址是 20.205.243.166,其实我们在地址栏中输入github的IP地址,也是能够访问到github网站的,但是因为IP地址不好记,所以一般地址栏里输入的都是域名。那么 DNS域名解析系统 就会将 用户在地址栏输入的 URL 里面的 域名 自动解析成 IP 地址。

二、封装过程
1、转换得到IP地址后,浏览器就能构造出一个HTTP数据报
后面详解

2、HTTP数据报被交给传输层
数据报具体就是被交给了TCP协议,因为传输层就是基于TCP协议。TCP就根据解析出的IP地址,三次握手来先建立连接,然后再发送HTTP请求。

3、数据报根据IP协议被交给网络层。
IP协议封装成IP数据报。

4、IP数据报再交给数据链路层,封装成对应的数据帧。

5、最终这个数据帧通过网卡传输出去。

三、进行传输
传输过程会经历一些交换机和路由器。

交换机会把数据分用到数据链路层(更上层的就不用解析了),再重新封装,继续转发。路由器会把数据分用到网络层(更上层的就不用解析了),再重新封装,继续转发,路由器根据数据报中的目的IP在路由表中匹配,找个合适的方向发出去,每次转发,TTL就 - 1。交换机和路由器上需要重新分用、封装,是因为交换机上,需要先进行分用,才能获取到数据报从哪里来的,重新封装,是因为需要调整源 mac 和 目的 mac;路由器进行转发,需要分用将目的IP解析出来,才能查路由表规划转发路径。

四、数据报到达服务器之后,服务器对数据报进行层层分用
一直到 HTTP 这一层,服务器就会找到我们想访问的那个资源,把资源构造成HTTP响应。(根据请求计算出响应的过程)

五、服务器把响应数据重新封装
封装过程与步骤二一致。

六、响应数据在中间进行转发,回到浏览器

七、客户端针对数据报进行解析
解析出一个网页,渲染至浏览器上。

相关文章:

  • 基于SpringBoot+大数据城市景观画像可视化设计和实现
  • transformer中的build_attention_mask
  • HTTP 请求中的 Content-Type 类型详解
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • Uniapp在屏幕尺寸低于960出现样式错乱(开箱即用)
  • setInterval 定时任务执行时间不准验证
  • Redis晋级之路!!
  • 阅读笔记:明朝那些事儿妖孽横行的宫廷
  • 基于Vue-cli脚手架搭建项目使用ElementUI组件
  • vue3第五阶段开发文档,后台管理系统
  • STM32 Customer BootLoader 刷新项目 (二) 方案介绍
  • Day8 —— 大数据技术之HBase
  • CPP-类对象大小的组成
  • Pip换源秘籍:让你的Python包飞行起来!
  • 美团携手HarmonyOS SDK,开启便捷生活新篇章
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Angular4 模板式表单用法以及验证
  • ComponentOne 2017 V2版本正式发布
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • iOS小技巧之UIImagePickerController实现头像选择
  • java第三方包学习之lombok
  • Linux链接文件
  • Mocha测试初探
  • PHP那些事儿
  • Spring Cloud中负载均衡器概览
  • Vue.js 移动端适配之 vw 解决方案
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 简析gRPC client 连接管理
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (十五)、把自己的镜像推送到 DockerHub
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (学习日记)2024.01.09
  • (转)EOS中账户、钱包和密钥的关系
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net 连接达梦数据库开发环境部署
  • .NET业务框架的构建
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @DS 多数据源 + @Transactional(rollbackFor = Exception.class) 导致@DS 多数据源没法使用
  • [20161214]如何确定dbid.txt
  • [AIGC] 解题神器:Python中常用的高级数据结构
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析