Day5 - 前端高频面试题之计算机网络相关
传送门>>>
上一篇: Day4 - 前端高频面试题之浏览器相关
1、请介绍一下HTTP
和HTTPS
的区别?
HTTPS
是在HTTP
的基础上加入了SSL
协议,SSL
依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密(在传输层)
HTTP
+ 加密 + 认证 + 完整性保护 = HTTPS
HTTPS
协议需要到CA申请证书或自制证书HTTP
的信息是明文传输;HTTPS
则是具有安全性的ssl加密HTTP
是直接与TCP进行数据传输;而
HTTPS
运行在SSL/TLS
(安全传输层协议)之上,SSL/TLS
运行在TCP
之上,用的端口也不一样,前者是80(需要国内备案),后者是443HTTP
的连接很简单,是无状态的;HTTPS
协议是由SSL+HTTP
协议构建的,可进行加密传输、身份认证的网络协议,比HTTP
协议安全
2、HTTP2
与HTTP1.x
相比的新特性有哪些?
1、HTTP2
使用的是新的二进制格式传送,HTTP1.X
是文本(字符串)传送。二进制协议解析起来更高效
2、HTTP2
支持多路复用,即连接共享,即每一个request
都是用作连接共享机制的。一个request
对应一个id
,这样一个连接上可以有多个request
,每个连接的request
可以随机的混杂在一起,接收方可以根据request
的id
将request
再归属到各自不同的服务端请求里面。
HTTP2.0
多路复用有多好?
HTTP
性能优化的关键并不在于高带宽,而是低延迟。TCP 连接会随着时间进行自我「调谐」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐则被称为 TCP 慢启动。由于这种原因,让原本就具有突发性和短时性的 HTTP 连接变的十分低效。HTTP/2
通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正的服务于 HTTP 的性能提升。
3、HTTP2
头部压缩,通过gzip
和compress
压缩头部然后再发送,既避免了重复header
的传输,又减小了需要传输的大小。
4、HTTP2
支持服务器推送。
3、请介绍一下TCP与UDP的区别,TCP的可靠性如何保证?
UDP
是面向无连接的,不可靠的数据报服务;
TCP
是面向连接的,可靠的字节流服务。
TCP
的可靠性是通过顺序编号和确认(ACK
)来实现的。
4、为什么TCP连接需要三次握手?为什么要四次挥手?画出TCP三次握手和四次挥手的全过程(并且标注ack确认号 和 seq序列号的值)
三次握手是客户端向服务器发请求,服务器接收请求,服务器接收请求之后发送一个连接标志,客户端接收连接标志之后也向服务器发送一个连接标志,至此连接完成,这是为了保证建立一个可靠的连接;
为什么一定要三次握手呢?考虑一下这种情况:
client
发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server
。本来这是一个早已失效的报文段。但server
收到此失效的连接请求报文段后,就误认为是client
再次发出的一个新的连接请求。于是就向client
发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要
server
发出确认,新的连接就建立了。由于现在client
并没有发出建立连接的请求,因此不会理睬server
的确认,也不会向server
发送数据。但server
却以为新的运输连接已经建立,并一直等待client
发来数据。这样,server
的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,
client
不会向server
的确认发出确认。server
由于收不到确认,就知道client
并没有要求建立连接。”。主要目的防止server
端一直等待,浪费资源。
四次挥手的作用就是断开连接,之所以要断开连接是因为TCP/IP
协议是要占用端口的,而计算机的端口是有限的,所以一次传输完成之后是要断开连接的;
为什么四次断开?
因为
TCP
有个半关闭状态,假设A、B
要释放连接,那么A
发送一个释放连接报文给B
,B
收到后发送确认,这个时候A
不发数据,但是B
如果发数据A
还是要接受,这叫半关闭。然后
B
还要发给A
连接释放报文,然后A
发确认,所以是4次。
- 第一次握手:主机
A
发往主机B
,主机A
初始序号是X
,设置SYN
(同步)位,未设置ACK
(确认)位 - 第二次握手:主机
B
发往主机A
,主机B
初始序号是Y
,ACK
(确认号)是X+1
,X+1
暗示已经收到主机A
发来主机B
的同步序号。设置ACK
位和SYN
位 - 第三次握手:主机
A
发往主机B
,主机A
初始序号是X+1
,ACK
是Y+1
,Y+1
暗示已经收到主机A
发来主机B
的同步序号。设置ACK
位,未设置SYN
位。
5、HTTP中,POST与GET的区别
1、用途不同:Get
是从服务器上获取数据,Post
是向服务器传送数据
2、数据传输方式不同:GET
请求通过URL传输数据,而POST
的数据通过请求体传输
3、传输数据量限制不同:Get
传送的数据量小,不能大于2KB
(因为浏览器对URL的长度有限制);POST
传送的数据量较大,一般被默认为不受限制
4、GET
的数据在URL
中,通过历史记录,缓存很容易查到数据信息,相对来说是不安全的;POST
的数据在请求主体内,所以有一定的安全性保证
5、GET
是安全(这里的安全是指只读特性,就是使用这个方法不会引起服务器状态变化)且幂等(指同一个请求方法执行多次和仅执行一次的效果完全相同),而POST
是非安全非幂等
6、HTTP的长连接和短连接分别是什么?你知道keep-alive是干什么的吗?
HTTP
的长连接和短连接实际上是TCP
的长连接和短连接,HTTP
属于应用层协议。
**短连接:**浏览器和服务器每进行一次HTPP
操作,就建立一个连接,但任务结束就会中断这个连接
长连接:HTTP1.1
规定了默认保持长连接,也称为持久连接。
意思就是,数据传输完成了保持TCP
连接不断开(不发RST
包、不四次握手),等待在同域名下继续用这个通道传输数据。
长连接好处:
- 同一个客户端可以使用这个长连接处理其他请求,避免
HTTP
重新连接和断开所消耗的时间; - 服务器可以利用这个连接 主动推送 消息到客户端(重要的)。
HTTP
头部有了Connection: Keep-Alive
这个值,代表客户端期望这次请求是长连接的。但是并不代表一定会使用长连接,服务器端都可以无视这个值,也就是不按标准来。实现长连接要客户端和服务端都支持长连接。
keep-alive
的优点:
- 较少的
CPU
和内存的使用(由于同时打开的连接的减少了) - 允许请求和应答的
HTTP
管线化 - 降低拥塞控制 (
TCP
连接减少了) - 减少了后续请求的延迟(无需再进行握手)
- 报告错误无需关闭
TCP
连接
7、HTTP Request Header和Response Header里面分别都有哪些比较重要的字段?
**通用首部字段:**请求报文和响应报文两方都会使用的首部
Cache-Control
告诉所有的缓存机制是否可以缓存及哪种类型Connection
表明是否需要持久连接Transfer-Encoding
文件传输编码
Request Header:
Accept
指定客户端能够接收的内容类型,内容类型中的先后次序表示客户端接收的先后次序Range
实体的字节范围请求Authorization
web的认证信息Host
请求资源所在服务器User-Agent
客户端程序信息
Response Header:
Location
令客户端重定向的URIETag
能够表示资源唯一资源的字符串Server
服务器的信息
实体首部字段:(Entity头域)
Last-Modified
请求资源的最后修改时间Expires
响应过期的日期和时间Allow
资源可支持http请求的方法,不允许则返回405Content-Type 返回内容的媒体类型 Content-Type: text/html; charset=utf-8
// 典型的请求消息: GET http://download.google.com/somedata.exe
Host: download.google.com
Accept:*/*
Pragma: no-cache
Cache-Control: no-cache
Referer: http://download.google.com/
User-Agent:Mozilla/4.04[en](Win95;I;Nav)
Range:bytes=554554-// 典型的响应消息: HTTP/1.0200OK
Date:Mon,31Dec200104:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Tue,17Apr200106:46:28GMT
Etag:"a030f020ac7c01:1e9f"
Content-length:39725426 复制代码
8、说说你所知道的web安全及防护措施?
对Web应用的攻击模式有以下两种:主动攻击和被动攻击
XSS(Cross-Site Scripting, 跨站脚本攻击 )(被动攻击)
是最常见和基本的攻击 WEB 网站方法,攻击者通过注入非法的 html 标签或者 javascript 代码,从而当用户浏览该网页时,控制用户浏览器。
影响:利用虚假输入表单骗取用户个人信息;利用脚本窃取用户的Cookie值
防御:
- httpOnly: 在 cookie 中设置 HttpOnly 属性,使js脚本无法读取到 cookie 信息
- 前端负责输入检查,后端也要做相同的过滤检查
- 某些情况下,不能对用户数据进行严格过滤时,需要对标签进行转换
CSRF (Cross-Site Request Forgeries, 跨站请求伪造)(被动攻击)
冒充用户发起请求(在用户不知情的情况下), 完成一些违背用户意愿的事情
本质:重要操作的所有参数都是可以被攻击者猜测到的。攻击者预测出URL的所有参数与参数值,就能成功地构造一个伪造的请求
影响:利用已通过认证的用户权限更新设定信息、购买商品、在留言板上发表言论等
防御:
- 验证码;强制用户必须与应用进行交互,才能完成最终请求
- 尽量使用 post ,限制 get 使用;get 太容易被拿来做 csrf 攻击
- 请求来源限制,此种方法成本最低,但是并不能保证 100% 有效,因为服务器并不是什么时候都能取到 Referer,而且低版本的浏览器存在伪造 Referer 的风险
- token 验证 CSRF 防御机制是公认最合适的方案
使用token的原理:
- 第一步:后端随机产生一个 token,把这个token 保存到 session 状态中;同时后端把这个token 交给前端页面;
- 第二步:前端页面提交请求时,把 token 加入到请求数据或者头信息中,一起传给后端;
- 后端验证前端传来的 token 与 session 是否一致,一致则合法,否则是非法请求。
SQL注入攻击(主动攻击)
- 会执行非法SQL的SQL注入攻击
HTTP首部注入攻击(被动攻击)
- 指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。
- 影响:设置任何Cookie信息;重定向至任意URL
转载于:https://juejin.im/post/5d1393ffe51d455a694f955f
Day5 - 前端高频面试题之计算机网络相关相关推荐
- 【干货分享】一篇文章帮你搞定前端高频面试题
前言 如今前端技术日新月异.对于前端开发人员来说,不仅需要掌握最新的前沿技术,还需要保持对基础知识的熟练掌握.而面试则是进入优秀企业的必经之路.在面试中,高频面试题的掌握是获得成功的关键.本文将为大家 ...
- 2022年必刷前端高频面试题
老张前端: 2022年必刷前端面试题,前端高频面试题,前端面试题 第一章 面试题基础篇 1.1 HTML面试题 1.1.1 行内元素有哪些?块级元素有哪些? 空(void)元素有哪些? 行内元素:sp ...
- 【前端高频面试题】 浏览器地址栏输入网页地址后发生了什么?
文章目录 前言 一.思考一下可能发生的步骤 二.经历的两个阶段 (1)网络阶段 1. DNS服务器域名解析 2. 建立TCP连接 3. 发送http请求 4.服务器处理请求并返回响应结果 5.关闭TC ...
- 2021前端高频面试题整理,附答案
大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 若川视野原意是若川的前端视野.但太长了就留下了四个字,不知道的以为关注的不是技术公众号. 今天分享一篇慕课网精英讲 ...
- 20道前端高频面试题(附答案)
setTimeout 模拟 setInterval 描述:使用setTimeout模拟实现setInterval的功能. 实现: const mySetInterval(fn, time) {let ...
- 前端高频面试题-非框架
前端面试题 1.盒子塌陷的原因?解决方式 原因: 1. 浮动导致的塌陷,浮动会脱落标准流2. 嵌套的两个盒子,子盒子设置margin-top会导致父盒子一下下移 解决方法:第一种情况 1 清除浮动; ...
- 前端高频面试题(15K级别)
1.简单描述一下 Babel 的编译过程? 首先,Babel的作用是 从一种源码到另一种源码,充当转换编译器的作用,可以简述为 解析(解析JS代码)->转换(解析和修改AST)->重建(将 ...
- 你还在为找工作发愁嘛?最新前端高频面试题(适合应届生),拿走不谢!
HTML.CSS相关 盒子模型: 一个盒子可以分成四个部分:外边距,边框,内边距,内容 默认情况下,盒子的width和height属性只是设置content(内容)的宽和高 盒子真正的宽应该是:内容宽 ...
- 初级前端高频面试题之VUE
1.vue优点? 轻量级框架:只关注视图层,是一个构建数据的视图集合: 简单易学:国人开发,中文文档,不存在语言障碍 ,易于理解和学习: 双向数据绑定:保留了angular的特点,在数据操作方面更为简 ...
最新文章
- R包dplyr进行数据清洗和整理
- java catch 空指针异常_关于Java:捕获空指针异常
- C语言实现臭皮匠排序stooge sort 算法(附完整源码)
- 机器学习性能度量(2):错误接受率 (FAR), 错误拒绝率(FRR),EER计算方法,python实现
- linux 目录/sys 解析
- python网课答案查询_中国大学慕课Python编程基础期末考试查题公众号答案
- Numpy基础知识点汇总
- CD(Continuous Deployment)实战问题之unable to read askpass解决
- 为啥这个月流量,感觉跑得特别快
- Microsoft buildup new website for open-source project
- 【概率论与数理统计】1.5 独立性
- 直播报名|美团技术沙龙56期:美团计算机视觉与多媒体技术实践--ACM MM2020专场...
- java bigdecimal.round_down,java BigDecimal 的 setScale() 方法的 BigDecimal.ROUND_DOWN 舍入模式的BUG,坑...
- flutter 带未读消息的底部导航
- 使用LaTeX表示数学方程(附源码)
- navicat导出数据库数据
- 高德poi获取之矩形搜索法(冲出900条限制)
- 表格无法无法计算机,电脑为什么不能新建excel表格怎么办
- HDU 3636-Dragon Balls
- java json 合并_java json 合并
热门文章
- 使用TensorFlow.js在浏览器中进行深度学习入门
- 使用.NET Core 3进行Linux编程:第3章
- 微信开源推理加速工具 TurboTransformers,性能超越 PyTorch/TensorFlow 与主流优化引擎
- NET的JIRA活动时间线REST API
- nvarchar(2048)能写多少个字符_我的拼多多店一个标题能带来多少的免费流量?三个字“非常多”...
- linux三并发进程,linux下用进度条显示三个进程的并发
- 简单的动态网站java,Java实践:一个简单的动态数组实现
- vue实现搜索框记录搜索历史_使用JS location实现搜索框历史记录功能_苏颜_前端开发者...
- 发送get请求php,如何利用PHP发送GET请求
- arp协议属于哪一层_TCP/IP协议栈-之-ARP协议分析