首页IT科技前端面试知识点(【学姐面试宝典】—— 前端基础篇Ⅰ(HTTP/HTML/浏览器))

前端面试知识点(【学姐面试宝典】—— 前端基础篇Ⅰ(HTTP/HTML/浏览器))

时间2025-05-04 00:08:58分类IT科技浏览3426
导读:前言...

前言

博主主页👉🏻蜡笔雏田学代码

专栏链接👉🏻【前端面试专栏】

今天开始学习前端面试题相关的知识!

感兴趣的小伙伴一起来看看吧~🤞

http 和 https 的基本概念

http: 超文本传输协议            ,是互联网上应用最为广泛的一种网络协议                 ,是一个客户端和服 务器端请求和应答的标准(TCP)      ,用于从 WWW 服务器传输超文本到本地浏览器的传 输协议      ,它可以使浏览器更加高效                 ,使网络传输减少           。 https: 是以安全为目标的 HTTP 通道           ,简单讲是 HTTP 的安全版      ,即 HTTP 下加入 SSL 层                  ,HTTPS 的安全基础是 SSL           ,因此加密的详细内容就需要 SSL                  。 (https 的 SSL 加密是在传输层实现的      。) https 协议的主要作用:建立一个信息安全通道,来确保数组的传输                  ,确保网站的真实 性           。

http 和 https 的区别

http 传输的数据都是未加密的                 ,也就是明文的,网景公司设置了 SSL 协议来对 http 协议 传输的数据进行加密处理            ,简单来说 https 协议是由 http 和 ssl 协议构建的可进行加密传 输和身份认证的网络协议                 ,比 http 协议的安全性更高                 。

主要的区别如下:

Https 协议需要 ca 证书      ,费用较高      。 http 是超文本传输协议            ,信息是明文传输                 ,https 则是具有安全性的 ssl 加密传输协议      。 使用不同的链接方式      ,端口也不同      ,一般而言                 ,http 协议的端口为 80           ,https 的端口为 443 http 的连接很简单      ,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传 输           、身份认证的网络协议                  ,比 http 协议安全                 。

https 协议的工作原理

客户端在使用 HTTPS 方式与 Web 服务器通信时有以下几个步骤:

客户使用 https url 访问服务器           ,则要求 web 服务器建立 ssl 链接            。 web 服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥)                  ,返回或 者说传输给客户端      。 客户端和 web 服务器端开始协商 SSL 链接的安全等级                 ,也就是加密等级                 。 客户端浏览器通过双方协商一致的安全等级,建立会话密钥            ,然后通过网站的公钥来加 密会话密钥                 ,并传送给网站            。 web 服务器通过自己的私钥解密出会话密钥。 web 服务器通过会话密钥加密与客户端之间的通信                 。

HTTP2.0 的特性

http2.0 的特性如下:

内容安全      ,应为 http2.0 是基于 https 的            ,天然具有安全特性                 ,通过 http2.0 的特性可以避免单纯使用 https 的性能下降                  。 二进制格式      ,http1.X 的解析是基于文本的      ,http2.0 将所有的传输信息分割为更小的消息和帧                 ,并对他们采用二进制格式编码           ,基于二进制可以让协议有更多的扩展性      ,比如引入了帧来传输数据和指令。 多路复用                  ,这个功能相当于是长连接的增强           ,每个 request 请求可以随机的混杂在一 起,接收方可以根据 request 的 id 将 request 再归属到各自不同的服务端请求里面                  ,另外 多路复用中也支持了流的优先级                 ,允许客户端告诉服务器那些内容是更优先级的资源, 可以优先传输           。

tcp 三次握手

一句话概括:客户端和服务端都需要直到各自可收发            ,因此需要三次握手                  。

简化三次握手:

从图片可以得到三次握手可以简化为:C 发起请求连接 S 确认                 ,也发起连接 C 确认我们 再看看每次握手的作用:第一次握手:S 只可以确认 自己可以接受 C 发送的报文段第 二次握手:C 可以确认 S 收到了自己发送的报文段      ,并且可以确认 自己可以接受 S 发 送的报文段第三次握手:S 可以确认 C 收到了自己发送的报文段      。

TCP 和 UDP 的区别

TCP 是面向连接的            ,UDP 是无连接的即发送数据前不需要先建立链接           。 TCP 提供可靠的服务                 。也就是说                 ,通过 TCP 连接传送的数据      ,无差错      ,不丢失                 , 不重复           ,且按序到达;UDP 尽最大努力交付      ,即不保证可靠交付      。 并且因为 TCP 可靠                  , 面向连接           ,不会丢失数据因此适合大数据量的交换      。 TCP 是面向字节流,UDP 面向报文                  ,并且网络出现拥塞不会使得发送速率降低(因 此会出现丢包                 ,对实时的应用比如 IP 电话和视频会议等)                 。 TCP 只能是 1 对 1 的,UDP 支持 1 对 1,1 对多            。 TCP 的首部较大为 20 字节            ,而 UDP 只有 8 字节      。 TCP 是面向连接的可靠性传输                 ,而 UDP 是不可靠的                 。

BOM 属性对象方法

什么是 Bom?

Bom 是浏览器对象            。

有哪些常用的 Bom 属性呢?

location 对象:

location.href——返回或设置当前文档的 URL

location.search——返回 URL 中的查询字符串部分。例 如 http://www.dreamdu.com/dreamdu.php?id=5&name=dreamdu —— 返回包括(?)后面的内 容?id=5&name=dreamdu

location.hash——返回 URL#后面的内容      ,如果没有#            ,返回空                 。

location.host——返回 URL 中的域名部分                 ,例如 www.dreamdu.com

location.hostname——返回 URL 中的主域名部分      ,例如 dreamdu.com

location.pathname——返回 URL 的域名后的部分                  。例如 http://www.dreamdu.com/xhtml/ 返 回/xhtml/

location.port——返回 URL 中的端口部分。例如 http://www.dreamdu.com:8080/xhtml/ 返回 8080

location.protocol——返回 URL 中的协议部分           。例如 http://www.dreamdu.com:8080/xhtml/ 返 回(//)前面的内容 http:

location.assign——设置当前文档的 URL

location.replace() ——设置当前文档的 URL      ,并且在 history 对象的地址列表中移除这个 URL location.replace(url);

location.reload()——重载当前页面

history 对象

history.go() ——前进或后退指定的页面数 history.go(num);

history.back() ——后退一页

history.forward() ——前进一页

Navigator 对象

navigator.userAgent ——返回用户代理头的字符串表示(就是包括浏览器版本信息等的字 符串) navigator.cookieEnabled ——返回浏览器是否支持(启用)cookie

400 和 401                  、403      、304状态码

400 状态码:请求无效

产生原因:前端提交数据的字段名称和字段类型与后台的实体没有保持一致                 ,前端提交到后台的数据应该是 json 字符串类型           ,但是前端没有将对象 JSON.stringify 转 化成字符串                  。 解决方法:对照字段的名称      ,保持一致性 将 obj 对象通过 JSON.stringify 实现序列化 401 状态码:当前请求需要用户验证 403 状态码:服务器已经得到请求                  ,但是拒绝执行 304 状态码:如果客户端发送了一个带条件的 GET 请求且该请求已被允许           ,而文档的内容(自 上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个 304 状态码      。

fetch 发送 2 次请求的原因

fetch 发送 post 请求的时候                  ,总是发送 2 次                 ,第一次状态码是 204,第二次才成功?

原因很简单            ,因为你用 fetch 的 post 请求的时候                 ,导致 fetch 第一次发送了一个 Options 请求      ,询问服务器是否支持修改的请求头            ,如果服务器支持                 ,则在第二次中发送真正的 请求           。

Cookie           、sessionStorage                 、localStorage 的区别

共同点:都是保存在浏览器端      ,并且是同源的

Cookie:cookie 数据始终在同源的 http 请求中携带(即使不需要)      ,即 cookie 在浏览器 和服务器间来回传递                 。而 sessionStorage 和 localStorage 不会自动把数据发给服务器                 ,仅 在本地保存      。cookie 数据还有路径(path)的概念           ,可以限制 cookie 只属于某个路径下, 存储的大小很小只有 4K 左右      。 (key:可以在浏览器和服务器端来回传递      ,存储容量 小                  ,只有大约 4K 左右)

sessionStorage:仅在当前浏览器窗口关闭前有效           ,自然也就不可能持久保持,localStorage: 始终有效                  ,窗口或浏览器关闭也一直保存                 ,因此用作持久数据;cookie 只在设置的 cookie 过期时间之前一直有效,即使窗口或浏览器关闭                 。(key:本身就是一个回话过程            ,关 闭浏览器后消失                 ,session 为一个回话      ,当页面不同即使是同一页面打开两次            ,也被视为 同一次回话)

localStorage:localStorage 在所有同源窗口中都是共享的;cookie 也是在所有同源窗口中 都是共享的            。(key:同源窗口都会共享                 ,并且不会失效      ,不管窗口或者浏览器关闭与 否都会始终生效)

补充说明一下 cookie 的作用:

保存用户登录状态

      。例如将用户 id 存储于一个 cookie 内      ,这样当用户下次访问该页面 时就不需要重新登录了                 ,现在很多论坛和社区都提供这样的功能                 。 cookie 还可以设置 过期时间           ,当超过时间期限后      ,cookie 就会自动消失            。因此                  ,系统往往可以提示用户保 持登录状态的时间:常见选项有一个月      、三个 月      、一年等。

跟踪用户行为                 。例如一个天气预报网站           ,能够根据用户选择的地区显示当地的天气情况                  。如果每次都需要选择所在地是烦琐的,当利用了 cookie 后就会显得很人性化了                  ,系统能 够记住上一次访问的地区                 ,当下次再打开该页面时,它就会自动显示上次用户所在地区 的天气情况。因为一切都是在后 台完成            ,所以这样的页面就像为某个用户所定制的一 样                 ,使用起来非常方便定制页面           。如果网站提供了换肤或更换布局的功能      ,那么可以使 用 cookie 来记录用户的选项            ,例如:背景色                 、分辨率等                  。当用户下次访问时                 ,仍然可以 保存上一次访问的界面风格      。

对 HTML 语义化标签的理解

HTML5 语义化标签是指正确的标签包含了正确的内容      ,结构良好      ,便于阅读                 ,比如 nav 表示导航条           ,类似的还有 article            、header      、footer 等等标签           。

iframe 是什么?有什么缺点?

定义:iframe 元素会创建包含另一个文档的内联框架

提示:可以将提示文字放在

<

<

<
iframe>

<

<

<

/iframe>之间      ,来提示某些不支持 iframe 的浏览器                 。

缺点:会阻塞主页面的 onload 事件 搜索引擎无法解读这种页面                  ,不利于 SEO iframe 和主页面共享连接池           ,而浏览器对相同区域有限制所以会影响性能      。

输入 URL 到页面加载显示完成发生了什么?

这是一个必考的面试问题      。

输入 url 后,首先需要找到这个 url 域名的服务器 ip                  ,为了寻找这个 ip                 ,浏览器首先会寻找缓存,查看缓存中是否有记录            ,缓存的查找记录为:浏览器缓存 => 系统缓存 => 路由器缓存                 ,缓存中没有则查找系统的 hosts 文件中是否有记录      ,如果没有则查询 DNS 服务器                 。 得到服务器的 ip 地址后            ,浏览器根据这个 ip 以及相应的端口号                 ,构造一个 http 请求      ,这个请求报文会包括这次请求的信息      ,主要是请求方法                 ,请求说明和请求附带的数据           ,并将这个 http 请求封装在一个 tcp 包中      ,这个 tcp 包会依次经过传输层                  ,网络层           , 数据链路层,物理层到达服务器                  ,服务器解析这个请求来作出响应                 ,返回相应的 html 给浏览器            。 因为 html 是一个树形结构,浏览器根据这个 html 来构建 DOM 树            ,在 dom 树的构建过程中如果遇到 JS 脚本和外部 JS 连接                 ,则会停止构建 DOM 树来执行和下载相应的代码      ,这会造成阻塞            ,这就是为什么推荐 JS 代码应该放在 html 代码的后面                 ,之后根据外部样式      ,内部样式      ,内联样式构建一个 CSS 对象模型树 CSSOM 树                 ,构建完成后和 DOM 树合并为渲染树           ,这里主要做的是排除非视觉节点      ,比如 script                  ,meta 标签和 排除 display 为 none 的节点      。 之后进行布局           ,布局主要是确定各个元素的位置和尺寸,之后是渲染页面                  ,因为 html 文件中会含有图片                 ,视频,音频等资源            ,在解析 DOM 的过 程中                 ,遇到这些都会进行并行下载      ,浏览器对每个域的并行下载数量有一定的限制            ,一 般是 4-6 个                 ,当然在这些所有的请求中我们还需要关注的就是缓存      ,缓存一般通过 Cache-Control                 、Last-Modify            、Expires 等首部字段控制                 。 Cache-Control 和 Expires 的区别在于 Cache-Control 使用相对时间      ,Expires 使用的是基于服务器端的绝对时间                 ,因为存在时差问题           ,一般采用 Cache-Control      ,在请求这些设置了缓存的数据时                  ,会先查看是否过期           ,如果没有过期则直接使用本地缓存,过期则请求并在服务器校验文件是否修 改                  ,如果上一次 响应设置了 ETag 值会在这次请求的时候作为 If-None-Match 的值交给 服务器校验                 ,如果一致,继续校验 Last-Modified            ,没有设置 ETag                 ,则直接验证 Last-Modified      ,再决定是否返回 304            。

一句话概括:DNS解析 => TCP 连接 => 发送 HTTP 请求 => 服务器处理请求并返回 HTTP 报文 => 浏览器解析渲染页面 => 连接结束

浏览器在生成页面的时候            ,会生成那两颗树?

构造两棵树                 ,DOM 树和 CSSOM 规则树

当浏览器接收到服务器相应来的 HTML 文档后      ,会遍历文档节点      ,生成 DOM树                 , CSSOM 规则树由浏览器解析 CSS 文件生成。

csrf 和 xss 的网络攻击及防范

CSRF:跨站请求伪造           ,可以理解为攻击者盗用了用户的身份      ,以用户的名义发送了恶意请求                  ,比如用户登录了一个网站后           ,立刻在另一个tab页面访问量攻击者用来制造攻击的网站,这个网站要求访问刚刚登陆的网站                  ,并发送了一个恶意请求                 ,这时候 CSRF 就产生了,比如这个制造攻击的网站使用一张图片            ,但是这种图片的链接却是可以修改 数据库的                 ,这时候攻击者就可以以用户的名义操作这个数据库      ,防御方式:使用验证码            ,检查 https 头部的 refer字段                 ,使用 token

XSS:跨站脚本攻击      ,是说攻击者通过注入恶意的脚本      ,在用户浏览网页的时候进行攻击                 ,比如获取 cookie           ,或者其他用户身份信息      ,可以分为存储型和反射型                  ,存储型是攻击者输入一些数据并且存储到了数据库中           ,其他浏览者看到的时候进行攻击,反射型的话不存储在数据库中                  ,往往表现为将攻击代码放在 url 地址的请求参数中                 ,防御方式:为 cookie 设置 httpOnly 属性,对用户的输入进行检查            ,进行特殊字符过滤                 。

今天的分享就到这里啦✨

\textcolor{red}{今天的分享就到这里啦✨}

今天的分享就到这里啦

原创不易                 ,还希望各位大佬支持一下

\textcolor{blue}{原创不易      ,还希望各位大佬支持一下}

原创不易            ,还希望各位大佬支持一下

🤞

点赞                 ,你的认可是我创作的动力!

\textcolor{green}{点赞      ,你的认可是我创作的动力!}

点赞      ,你的认可是我创作的动力!

⭐️

收藏                 ,你的青睐是我努力的方向!

\textcolor{green}{收藏           ,你的青睐是我努力的方向!}

收藏      ,你的青睐是我努力的方向!

✏️

评论                  ,你的意见是我进步的财富!

\textcolor{green}{评论           ,你的意见是我进步的财富!}

评论,你的意见是我进步的财富!
声明:本站所有文章                  ,如无特殊说明或标注                 ,均为本站原创发布                  。任何个人或组织,在未征得本站同意时            ,禁止复制、盗用                 、采集                  、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益                 ,可联系我们进行处理           。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
百度快速收录功能开通(Typecho百度收录插件:提升网站曝光度的绝佳利器) vue封装sdk(uview2.0封装http请求实战以及常见请求传参实录)