从输入url到页面展现(一)从浏览器解析url开始
前端面试有一道很考验人的问题,那就是:请你说一下从用户从输入url到页面展现的过程是怎样的?在接下来的一段时间呢,狗哥会从这一问题出发,开始剖析这个过程,希望可以让更多的小伙伴掌握到这个过程,虽说不能吊打加手撕面试官吧(你把他打了,你还怎么入职,对面试官要好一些),但漏一小手还是没问题的。

目录
1. url是什么?
2. url有哪几种类型
3. 浏览器如何解析url
4. 省略index.html这个文件名的解析
5. 小结
1. url是什么?
面试官问的这道题,用户输入url,一般就是说的网站的网址,但其实这个url,这个所谓的网址,远远不止网站的网址。因为我们一般使用浏览器就是用来访问网站的,购物啦,看视频啦,读博客啦,都是以http开头的网址,而我们使用浏览器的目的也是通过网址来访问web服务器。
但其实浏览器不光能访问web服务器,对吧,我记得之前不用outlook这些客户端的时候,我都是通过浏览器打开公司的企业邮箱,后来发现这样不太好,比较low,所以他可以充当邮箱客户端,对吧;我们经常用浏览器上传图片文件,下载一些文件,它也可以用来在FTP服务器上做下载和上传文件的工作,对吧。
2. url有哪几种类型
例如访问web服务器时使用的网址:http://www.aa.com:80/hello/index.html

例如使用FTP协议上传和下载文件时的网址:ftp:ftp.aa.com:21/myDownFiles/fil1.txt

例如想要读取本地文件时:file://localhost/c:/filePath/2023041301.png

例如我们发送电子邮件可能会用到:mailto:dog@aa.com

是不是发现有点乱,让浏览器有点莫不着头脑了快,但你会发现,前面的http ftp file mailto 不同,这些头关键字就是所谓的协议,也更像是我们写代码时候定义的不同的函数,比如我要访问web服务器,就调用http这个函数,然后这个函数规定我后面如何传参,比如我要访问邮箱服务器,我就应该调用mailto这个函数,使用这个协议,然后这个函数又规定我们应该传哪些参数。协议大概也就是这么几种:

而如果更好理解的话呢,就像是这样:
switch (agree) {case ‘http’:// 执行http 访问web服务器break;case ‘ftp’:// 执行ftp 访问ftp服务器break;case ‘file’:// 访问 文件服务器break;case ‘mailto’:// 访问邮箱服务器break;……
}
3. 浏览器如何解析url
如果有面试官问你从输入url到网页展现,你第一步肯定是要说明浏览器解析url的这一过程。如果你有幸看到狗哥这篇博客,那么你可以回忆一下自己之前是怎么回答的,或者看看其他博客大家是如何说的。我们还以 http://www.aa.com:80/hello/index.html 为例,看看浏览器大概如何解析这个url网址。
刚才我们说,浏览器解析url会随着协议的不同而不同,所以我们就要看一下url包含哪几个元素,通过拆分出来的这几个元素,再看url所代表的含义。

而我们从输入url,再到url请求,中间经历无数的路由器,网线,最终到达服务端那台机器,那台机器的具体文件目录又是如何安置的呢?

4. 省略index.html这个文件名的解析
刚才我们说正常的url应该是 协议+服务器域名+端口+目录+文件名,比如上面提到的http://www.aa.com/hello/index.html,但是我们时常还可以看到不是这样的,或者是五花八门的,比如 :
http://www.aa.com/hello/
很明显,这个Url带了协议,带了域名,带了目录名,目录名后面有个斜杠,但是没有带文件名,也就是没有那个index.html.
这种解析的方式就是,以 / 结尾了,那么hello/后面的文件名被省略了,但是没有文件名,和我们上面的理解又有所不同,不满足http类型url的规范啊。所以,这种url的方式,默认找到hello目录文件夹,然后如果省略的话,就找它下面的inde文件或者default文件名,比如index.html啦,default.jsp啦这种的文件。
http://www.aa.com/
我们经常可以看见的网址其实就是直接一个域名,后面没有带 / 的,比如我们常见的www.aa.com 这种的url格式,但即便不带,其实也是和带了 / 同样的意思,当没有路径名的时候,就默认是根路径了。那么就继续访问跟路径下的index或者default这样的文件名。当然,依我们常规的理解,肯定是html jsp 这类的落地执行文件,而非js css这样的被引用脚本文件。
http://www.aa.com/hello
类似这种,不是域名结尾的,是以一个看着像路径名又像文件名的,后面也没有跟 / ,感觉是不是有点乱套,不过程序嘛,就是解决人们觉得乱套的东西的。如果是这种直接以某个非 / 结尾的,那么这个hello可能是个文件夹,也可能是个文件,所以,如果根目录下可以找到hello文件名,比如hello.html,那么我们其实访问的就是http://www.aa.com/hello.html,这个url的服务器文件,但如果没有找到hello的文件名,那么我们就认定hello是一个目录,一个路径,一个文件夹,就去这个hello目录下继续去寻找index文件名或者default文件名,这个url大概就会变成这个样子了:http://www.aa.com/hello/index.html
5. 小结
大家跟着把这个专栏读完把,也鼓励狗哥把这个专栏写完,这个专栏必定会是一个很长的旅程,你读完本专栏,一旦有面试官胆敢问你从浏览器输入url到页面展现的问题,这就是他噩梦的开始。其实我平时面试别人不太喜欢问一些有的没的,如果公司真缺人,你问了工作中需要的得了呗,顶多提升着问一下工作中遇到的问题,如何解决的。有些面试官是真的gou,工作中不用什么,他非问什么。就你们公司那破代码,刚去的人起都起不来,谁敢上去就碰,就优化呀。
相关文章:
从输入url到页面展现(一)从浏览器解析url开始
前端面试有一道很考验人的问题,那就是:请你说一下从用户从输入url到页面展现的过程是怎样的?在接下来的一段时间呢,狗哥会从这一问题出发,开始剖析这个过程,希望可以让更多的小伙伴掌握到这个过程ÿ…...
购物 · 礼物
标题 前言必学场景词汇及用法书店花店玩具店讨价还价情境常用单词书店花店玩具店前言 加油 必学场景词汇及用法 书店 1.book store / book shop 书店 I browsed through the book store, but I didn’t find the book I was looking for. 我把书店里的书浏览了一番,但是没…...
可视化图表API格式要求有哪些?Sugar BI详细代码示例(2)
Sugar BI中的每个图表可以对应一个数据 API,用户浏览报表时,选定一定的过滤条件,点击「查询」按钮将会通过 API 拉取相应的数据;前面说过,为了确保用户数据的安全性,Sugar BI上的所有数据请求都在Sugar BI的…...
153. 寻找旋转排序数组中的最小值
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2] 若旋转 7 次࿰…...
Linux 文件描述符
Linux 文件描述符 Linux 中一切皆文件,比如 C 源文件、视频文件、Shell脚本、可执行文件等,就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Linux 会给每个…...
第17章_反射机制
第17章_反射机制 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. 反射(Reflection)的概念 1.1 反射的出现背景 Java程序中,所有的对象都有两种类型:编…...
使用VBA小程序提高资产清查效率
资产清查是一件相当烦人的工作,去年使用LayUIPHPMS SQL Server 2014写了一个资产清查的程序,可惜写完了,LayUI已经停止更新了,就没有再完善下去,数据也没有更新,等于就废了。 今年又要进行资产清查…...
JavaSE学习进阶day07_02 异常
第三章 异常 3.1 异常概念 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的非正常的情况࿰…...
操作系统学习笔记
文章目录 操作系统虚拟内存锁缓存机制CPU性能指标进程、线程文件管理系统 操作系统 操作系统是控制应用程序的执行,并充当应用程序和计算机硬件之间的接口。在计算机系统中,处于最外层的是(应用软件) 。 面向用户的就是外层的&am…...
【Spring Boot】SpringBoot设计了哪些可拓展的机制?
文章目录 前言SpringBoot核心源码拓展Initializer拓展监听器ApplicationListenerBeanFactory的后置处理器 & Bean的后置处理器AOP其他的拓展点 前言 当我们引入注册中心的依赖,比如nacos的时候,当我们启动springboot,这个服务就会根据配置…...
《程序员面试金典(第6版)》面试题 10.10. 数字流的秩
题目描述 假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说: 实现 track(int x) 方法,每读入一个数字都会调用该方法; 实现 g…...
智能洗地机好用吗?值得入手的洗地机推荐
洗地机是一款高效的地面清洁设备,不仅可以很好清理地面不同形态的干湿垃圾,还减少了人工和水资源的浪费,是我们日常生活中必不可少的清洁工具。作为以一位评测博主,很多朋友咨询我在选购洗地机时应该注意哪些要点,有哪…...
Spring Security实战(一)——基于内存和数据库模型的认证与授权
目录 简介 一、初识Spring Security(入门案例) (1)新建project (2)选择依赖 (3)编写一个 HelloController (4)启动项目,访问localhost:8080…...
轻松掌握FFmpeg编程:从架构到实践
轻松掌握FFmpeg编程:从架构到实践 (Master FFmpeg Programming with Ease: From Architecture to Practice 引言 (Introduction)FFmpeg简介与应用场景 (Brief Introduction and Application Scenarios of FFmpeg)为什么选择FFmpeg进行音视频处理 (Why Choose FFmpeg…...
桌面应用程序开发攻略(初步了解)
什么是桌面应用程序? 桌面应用开发是指为桌面计算机或其他类似设备(如服务器)开发软件应用程序的过程。桌面应用通常是独立于浏览器运行的,并且可以在操作系统的桌面或应用程序菜单中找到。桌面应用可以使用各种编程语言开发&…...
【李老师云计算】HBase+Zookeeper部署及Maven访问(HBase集群实验)
索引 前言1. Zookeeper1.1 主机下载Zookeeper安装包1.2 主机解压Zookeeper1.3 ★解决解压后文件缺失1.4 主机配置Zookeeper文件1.4.1 配置zoo_sample.cfg文件1.4.2 配置/data/myid文件 1.5 主机传输Zookeeper文件到从机1.6 从机修改Zookeeper文件1.6.1 修改zoo.cfg文件1.6.2 修…...
第11章_常用类和基础API
第11章_常用类和基础API 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. 字符串相关类之不可变字符序列:String 1.1 String的特性 java.lang.String 类代表字符串…...
Java语言数据类型与c语言数据类型的不同
目录 一、c语言数据类型 1.基本类型: 2.枚举类型: 3.空类型: 4.派生类型: 二、C语言编程需要注意的64位和32机器的区别 三、 不同之处 一、c语言数据类型 首先,先来整体介绍一下C语言的数据类型分类。 1.基…...
C# Replace()、Trim()、Split()、Substring()、IndexOf() 、 LastIndexOf()函数
目录 一、Replace() 二、Trim() 三、Split() 四、Substring() 五、IndexOf() 六、LastIndexOf() 一、Replace() 在C#中,Replace()是一个字符串方法,用于将指定的字符或子字符串替换为另一个字符或字符串。下面是一些Replace()方法的常见用法和示例…...
C++类的理解与类型名,类的成员,两种定义方式,类的访问限定符,成员访问,作用域与实例化对象
面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成 面向…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
