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

从输入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到页面展现的过程是怎样的?在接下来的一段时间呢,狗哥会从这一问题出发,开始剖析这个过程,希望可以让更多的小伙伴掌握到这个过程&#xff…...

购物 · 礼物

标题 前言必学场景词汇及用法书店花店玩具店讨价还价情境常用单词书店花店玩具店前言 加油 必学场景词汇及用法 书店 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 次&#xff0…...

Linux 文件描述符

Linux 文件描述符 Linux 中一切皆文件,比如 C 源文件、视频文件、Shell脚本、可执行文件等,就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Linux 会给每个…...

第17章_反射机制

第17章_反射机制 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. 反射(Reflection)的概念 1.1 反射的出现背景 Java程序中,所有的对象都有两种类型:编…...

使用VBA小程序提高资产清查效率

资产清查是一件相当烦人的工作,去年使用LayUIPHPMS SQL Server 2014写了一个资产清查的程序,可惜写完了,LayUI已经停止更新了,就没有再完善下去,数据也没有更新,等于就废了。 今年又要进行资产清查&#xf…...

JavaSE学习进阶day07_02 异常

第三章 异常 3.1 异常概念 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的非正常的情况&#xff0…...

操作系统学习笔记

文章目录 操作系统虚拟内存锁缓存机制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是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成 面向…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...