经典面试题:“从输入URL到展示出页面“这个过程发生了什么?

news2024/11/25 15:23:46

目录

🐳今日良言:在逆境中善待自己

🐇一、输入网址(URL)

🐇二、域名查询(DNS解析)

🐇三、建立TCP连接

🐇四、发送HTTP/HTTPS请求

🐇五、服务器响应请求

🐇六、浏览器解析渲染页面

🐇七、断开TCP连接


🐳今日良言:在逆境中善待自己

🐇一、输入网址(URL)

"从输入URL到展示出页面"这个过程发生了什么?

总结来说就是七步.第一步:在浏览器中输入网址(URL)

首先来介绍一下:什么是URL?

URL是唯一资源定位符.

标识了互联网上唯一的资源的位置(资源在哪个服务器的目录下的哪个文件)

URL最关键的四个部分:

1)域名/IP

2)端口号

3)带层次的文件路径.

4)查询字符串.

一个URL这几个部分,有的可以省略.

以:https://www.sogou.com/  为例:

https是协议方案名.

https(https是http的安全版).

HTTPS使用SSL协议和TLS协议(是更为安全的升级版 SSL)来保障信息的安全(确保信息发送到正确的客户端和服务器、加密数据,防止信息在传输过程中被窃取,维护数据的完整性、确保数据在传输过程中不被改变)

省略了端口,省略端口的时候,浏览器会默认提供端口,对于http来说,默认端口是80,对于https来说,默认端口是443

最后面的 '/' 也是路径.没省略只是有点短,代表根目录(是http服务器的根目录)

当在浏览器中输入URL后敲下回车,浏览器会对输入的信息进行以下判断:

1)检查输入的内容是不是一个合法的URL链接还是一个待搜素的关键词

2)如果是合法的URL链接,判断输入的URL是不是一个完整的URL,如果不是,浏览器就会自己猜测,然后补全这个URL.

3)如果是一个待搜索的关键词,浏览器就会根据用户设置的默认搜索引擎来进行搜索.

🐇二、域名查询(DNS解析)

浏览器开始查找域名对应的IP地址.

请求发起后,浏览器会解析这个域名(www.baidu.com)

整体流程图:

1)首先,它会查看本地硬盘的hosts文件,hosts文件默认路径如下:

 (这个hosts文件像hash表一样,建立了域名和IP的映射关系.

现在打开基本上都是空的)

(早期的时候,互联网上服务器寥寥无几,每个用户手动维护自己的hosts文件就够用了,但是后来互联网蓬勃发展,现在网站成千上万,每天都有新网站诞生,旧网站消亡,此时手动维护已经不靠谱了)

看看hosts文件其中有没有和这个域名对应的IP,如果有的话,直接使用这个hosts文件里的IP地址.

2)如果在本地的hosts文件里面没有找到这个域名对应的IP地址,此时浏览器就会发送一个DNS请求到本地DNS服务器.

(本地DNS服务器一般都是由网络接入服务器商提供(中国移动 中国电信....))

查询输入网址的DNS请求到达本地DNS服务器以后,本地DNS服务器首先会查询它的缓存记录,看看缓存记录中有没有这条记录,如果有就直接返回.

3)本地DNS服务器的缓存记录没有这条记录,此时本地DNS服务器向根DNS服务器进行查询.

根DNS服务器没有记录具体的IP地址和域名的对应关系,根DNS服务器给出一个顶级域DNS服务器(.com 域服务器)的地址,让本地DNS服务器到顶级域DNS服务器上查询.

这里补充一下DNS服务器的种类:

自高到低分为4个级别:根DNS服务器、顶级域DNS服务器、权威DNS服务器和本地DNS服务器。

4)本地DNS服务器向顶级域DNS服务器(.com域服务器)进行查询.

顶级域DNS服务器中也没有记录具体的IP地址和域名的对应关系.顶级域DNS服务器给出一个权威DNS服务器(www.baidu.com 域服务器)的地址,让本地DNS服务器到这个权威DNS服务器上进行查询.

5)本地DNS服务器向权威DNS服务器(www.baidu.com 域服务器)进行查询.

这时本地DNS服务器就会收到一个域名和IP地址的对应关系,本地DNS服务器就会将IP地址返回给浏览器,并将这个对应关系保存到缓存记录中,以便于下次进行查询时,可以直接返回结果,加快网络访问.

🐇三、建立TCP连接

HTTP是浏览器和服务器之间的桥梁,HTTP往往是基于传输层的TCP协议实现的,所以说,要先建立TCP连接,当浏览器获取到服务器的IP地址后,会用一个随机端口号(1024 -> 65535) 向服务器80端口发起TCP的连接请求,当这个请求到达服务器端后,就会进行TCP的三次握手来建立连接.

博主之前写过详细的三次握手,博客链接如下:

(2条消息) TCP报文详解_程序猿小马的博客-CSDN博客

🐇四、发送HTTP/HTTPS请求

当TCP连接建立好以后,浏览器向服务器发送HTTP请求.(一般是一个html文件)

🐇五、服务器响应请求

当服务器收到这个HTTP请求以后,服务器解析这个请求,然后返回一个HTTP响应报文(包括相关的响应头和html正文)

🐇六、浏览器解析渲染页面

浏览器解析资源并布局渲染.主要步骤有三步:

1)对于获取到的 HTML CSS JS 图片等资源,浏览器通过解析HTML生成DOM树.

2)浏览器解析CSS,生成CSS 对象模型(CSSOM).

3)将DOM树和CSSOM树合成一棵渲染树.

4)根据渲染树进行布局,计算CSS样式,即每个节点在页面中的大小和位置等几何信息,然后将各个节点渲染到屏幕上.

🐇七、断开TCP连接

断开TCP连接的过程是四次挥手,博主之前的博客有过介绍(和三次握手的博客链接一致)

(2条消息) TCP报文详解_程序猿小马的博客-CSDN博客

以上就是 "从输入URL到展示出页面"这个过程.(如果有地方写的不足,还请UU们可以指出)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Simple_SSTI_2

Simple_SSTI_2前言一、python类的内置属性二、解题步骤1.查看当前目录2. 打开flag文件得到flag前言 要想做到这个题,先要了解SSTI_2模板注入详解 一、python类的内置属性 先看如下一段代码: class Restaurant:"""类"""def…

存储的本质-学习笔记

1 经典案例 1.1 数据的流动 一条用户注册数据流动到后端服务器,持久化保存到数据库中。 1.2 数据的持久化 校验数据的合法性修改内存写入存储介质2 存储&数据库简介 2.1 存储系统特点 性能敏感、容易受硬件影响、存储系统代码既“简单”又“复杂”。 2.2 数…

从0到1实现单机记账APP原理与细节uniApp内含源码 (二)

单机记账APP演示及源码 具体演示如下面视频所示。免费下载地址:点击进入 预览APP下载地址:http://8.142.10.182:8888/down/aWHWeGaEQE2W.apk (带宽很小所以下载速度慢) 由于资源已经通过了,页面的样式这里就不写了&am…

蓝桥杯单片机组省赛十二届第一场(关于矩阵,温度ds18b20,时间ds1302的学习,以及继电器等外设的综合利用)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、该题目如下二、使用步骤1.矩阵键盘实现2.温度传感器ds18b20的实现总结提示:以下是本篇文章正文内容,下面案例可供参考 一、该题目如下 分…

使用Containerd搭建K8s集群【v1.25】

[toc] 一、安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多集群中所有机器之间网络互通可以访问外网,需要拉取镜像禁止swap分区二、准备环境 角色IP…

重磅新品 / 酷炫展品 / 强大生态,广和通玩转 MWC Barcelona 2023

2月27日,2023世界移动通信大会(MWC Barcelona 2023)在西班牙巴塞罗那正式开幕。全球知名移动运营商、设备制造商、技术提供商、物联网企业齐聚一堂,以领先的技术、创新的场景、前瞻的洞察向全行业输送最新鲜的行业观点。作为全球领…

python的opencv操作记录13——区域生长及分水岭算法

文章目录图像区域基本算法——形态学运算腐蚀与膨胀开运算与闭运算opencv中的形态学运算距离计算——distanceTransform函数连通域连通的定义计算连通域——connectedComponents连通域实验基于区域的分割区域生长算法自定义一个最简单区域生长算法实现区域分割一般区域分割open…

解决vscode无法自动更新

一.前言 要在vscode里面安装插件,被提示版本不匹配,然后得更新,然后我发现我的'帮助'菜单栏下没有检查更新,然后我去&…

19- CNN进行Fashion-MNIST分类 (tensorflow系列) (项目十九)

项目要点 Fashion-MNIST总共有十个类别的图像。代码运行位置 CPU: cputf.config.set_visible_devices(tf.config.list_physical_devices("CPU"))fashion_mnist keras.datasets.fashion_mnist # fashion_mnist 数据导入训练数据和测试数据拆分: x_valid, x_train…

WebAPI

WebAPI知识详解day11.Web API 基本认知作用和分类什么是DOM?DOM树的概念DOM对象2.获取DOM对象通过css选择器获取dom对象通过其他方法获取dom3.设置/修改DOM元素内容方法1. document.write() 方法方法2. 对象.innerText 属性方法3. 对象.innerHTML4.设置/修改DOM元素…

【TypeScript】的上手学习指南!

目录TS简介TypeScript是什么?为什么要推荐使用TypeScript生态支持安装TypeScriptTS简介 TypeScript是什么? TypeScript官网 简介:TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。TypeScript可以在任何浏览器、任何计…

JVM之执行引擎详解

1、概述javac将.java文件编译成.class文件,然后.class文件通过类加载子系统将字节码加载到运行时数据区,这时运行时数据区中的数据是java字节码,字节码是不能直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令&#x…

Python练习题

作业1:判断一个数,是否是2的指数 2的指数 0000 0010 0000 0001 0000 0100 0000 0011 0000 1000 0000 0111 0001 0000 0000 1111 提示:所有2的指数:n&(n - 1) 0 exponent int(…

mybatisplus复习(黑马)

学习目标能够基于MyBatisPlus完成标准Dao开发能够掌握MyBatisPlus的条件查询能够掌握MyBatisPlus的字段映射与表名映射能够掌握id生成策略控制能够理解代码生成器的相关配置一、MyBatisPlus简介MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工…

Linux:进程间通信

目录 进程间通信目的 进程间通信分类 管道 System V IPC POSIX IPC 什么是管道 站在文件描述符角度-深度理解管道 管道使用 管道通信的四种情况 管道通信的特点 进程池管理 命名管道 创建一个命名管道 命名管道的打开规则 命名管道通信实例 匿名管道与命名管道的…

C语言实现三子棋【详解+全部源码】

大家好,我是你们熟悉的恒川 今天我们用C语言来实现三子棋 实现的过程很难,但我们一定要不放弃 三子棋1. 配置运行环境2. 三子棋游戏的初步实现2.1 建立三子棋分布模块2.2 创建一个名为board的二维数组并进行初始化2.3 搭建棋盘3. 接下来该讨论的事情3.1 …

【微信小程序】-- 网络数据请求(十九)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

Jmeter接口测试教程之【参数化技巧总结】,总有一个是你不知道的

目录:导读 一、随机值 二、随机字符串 三、时间戳 四、唯一字符串UUID 说起接口测试,相信大家在工作中用的最多的还是Jmeter。 大家看这个目录就知道jmeter的应用有多广泛了:https://www.bilibili.com/video/BV1e44y1X78S/? JMeter是一个…

C#:Krypton控件使用方法详解(第十一讲) ——kryptonScrollBar

今天介绍的Krypton控件中的kryptonScrollBar。下面介绍这个控件的外观属性:BackColor属性:表示控件的背景色,属性值如下图所示:BackgroundImage属性:表示用于该控件的背景图像,属性值可以为本地导入图片。B…

final修饰符使用中遇到的一些问题

文章目录final修饰符1. final不能用来修饰构造方法2. final修饰变量的一些注意问题2.1 final修饰成员变量2.2 final修饰引用类型2.2.1 演示代码中lombok链式编程介绍final修饰符 final具有“不可改变”的含义,它可以修饰非抽象类、非抽象成员方法和变量。 用final…