【面经】面试中遇到频率最高的23道HTTP面试题,需要全都背!
模拟面试、简历指导可私信找我,最低的价格收获最高的指导~
前言
大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。
1、GET进而POST的区别?
幂等:前者幂等,后者非幂等(幂等指的是一次请求和多次请求的效果相同) 应用场景:前者用来获取资源,后者用来提交资源 缓存:前者一般会做缓存,后者不做缓存 传参:前者只能传字符串拼接,后者可以请求体、字符串拼接 安全性:都不安全 传参长度:由于前者传参是url拼接,所以会因为浏览器限制url长度,而导致传参长度被限制 参数类型:前者只允许传ASCII字符,后者支持文件、图片、表单、JSON等
2、POST和PUT的区别?
POST
一般用来提交新数据,PUT
一般用来修改数据
3、常见HTTP请求头
请求头
Accept:浏览器能够处理的内容类型 Accept-Charset:浏览器能够显示的字符集 Accept-Encoding:浏览器能够处理的压缩编码 Accept-Language:浏览器当前设置的语言 Connection:浏览器与服务区之间的连接类型 Cookie:当前页面设置的Cookie Host:发送请求的域名 Referer:发送请求的页面URL User-Agent:浏览器的用户代理字符串
响应头
Date:消息发送的时间 server:服务器名称 Connection:浏览器与服务器之间的连接类型 Cache-Control:HTTP强缓存 Content-Type:数据类型
4、页面有多张图片,HTTP怎么加载表现的?
HTTP1时期,最大TCP连接数只能为6,所以会请求多次
HTTP2时期,支持多路复用,可以一瞬间加载出来,牛逼!
5、说说状态码304
协商缓存命中时返回304
6、常见的HTTP请求方法
GET:获取资源 POST:提交资源 PUT:提交并修改资源 PATCH:对资源部分修改 OPTIONS:探头,用来探测是否支持请求方法、跨域、安全 CONNECT:与代理服务器建立管道,使用管道进行TCP通信 TRACE:让服务器原样返回客户端的请求信息内容,用于测试或诊断
7、HTTP1.0与HTTP1.1的区别?
连接:1.0非持久连接,1.1持久连接,多个http请求可复用同一个TCP连接
资源请求:1.1引入了range头,允许只请求资源的某个部分
缓存:1.0使用
Expire、If-Modified-Since
来当做缓存投;1.1使用Etag、If-None-Match、If-Match
Host:1.1新赠Host请求头,用来表示请求服务器的域名
方法:1.1新增
PUT、HEAD、OPTIONS
等方法
8、HTTP1.1与HTTP2.0的区别?
二进制协议:2.0头信息和数据体都是二进制,统称为“帧”,是多路复用的基础
多路复用:2.0复用TCP连接,同一个TCP连接中,可发多个请求或回应,这就解决了队头阻塞问题
数据流:2.0将每个请求或回应的所有数据包统称为一个数据流,每一个数据流都有独一无二的编号ID,用于数据传输时的区分
头信息压缩:2.0维护一张头信息表,所有头字段信息都会记录在这张表里,发送时只需要发送对应的key就行,大大节省空间。为啥这么做呢?你想想,如果多个header内容都一样,照样发送的话,是不是很浪费空间
服务器推送:2.0可提前向客户端推送静态资源,这样客户端页面的加载延迟就会大大减少
9、队头阻塞是啥?
是啥?
你可以理解为,以前的HTTP请求都是一发一收的模式,有点类似于串行,也就是排队。那如果有多个请求并发的话,那就需要等待很久啊。
解决?
并发连接:串行变并行,提升总体请求速度 域名分片:域名分出很多二级域名,这样可并发的数量就变多了,也就提升了总体请求速度
10、HTTP和HTTPS的区别?
HTTPS = HTTP + SSL,涉及到对称加密、非对称加密、证书
可以看我的文章:https://juejin.cn/post/7042158171778973732
11、页面从输入URL后发生啥?
解析URL为IP:走的是DNS解析那一套,依次寻找浏览器缓存、本地DNS服务器、根域名DNS服务器、权威DNS服务器,直到寻找到IP,并缓存在浏览器缓存
TCP三次握手:确保客户端和服务端之间的连通性
发送HTTP请求:发送请求报文
页面渲染:HTML解析器和CSS解析器并行构建DOM树和CSS树,然后结合成CSSOM树,JS引擎运行JS代码,进行DOM的操作或修改。然后进行UI布局、绘制,进而将整个页面渲染出来
TCP四次挥手:客户端和服务端断开连接
12、什么是WebSocket?
WebSocket
是一种网络通信协议,是在TCP连接上进行全双工通信的协议。
Websocket
可以实现客户端和服务端之间进行全双工通信,任何一方都可以通过简历连接将数据传到另一端,它只需要建立一次连接,就可以一直保持连接状态
13、HTTP状态码有哪些状态码?
1XX:信息类状态码 2XX:成功状态码 3XX:重定向状态码 4XX:请求错误状态码 5XX:服务端错误状态码
2XX
200:成功处理请求 201:成功创建,一般应用在POST 202:服务端接收请求,但尚未处理,不保证完成请求 204:请求成功,但是相应爆文不含实体的主体部分
3XX
301:永久性重定向 302:临时重定向 304:协商缓存命中
4XX
400:请求内容存在语法错误 401:请求无权限 403:请求资源被服务端拒绝 404:无法找到请求的资源
5XX
500:服务器报错 501:服务端不支持当前请求所需要的某个功能 503:服务器暂时处于超负载或停机维护,无法处理请求
14、什么是DNS?
DNS(Domain Name System)域名系统
,他的作用,简单来说就是把请求域名转换成IP
15、DNS的查询IP过程
1、先在浏览器缓存中查找IP地址,查到直接返回,不走下一步 2、在本地DNS服务器中查找IP,查到直接返回,不走下一步 3、本地DNS服务器向根域名服务器发送请求,并在其中查找IP,查到直接返回,不走下一步 4、本地DNS服务器向权威域名服务器发送请求并查找IP,返回对应结果 5、本地DNS服务器接收到结果,并缓存,供下次查找使用 6、本地DNS服务器将接收到结果返回给浏览器
16、TCP的三次握手
第一次握手:客户端向服务端发送请求报文段,此报文段中包含自身数据通讯初始序号。客户端进入SYN-SENT状态 第二次握手:服务端接收到报文后,同意链接,发送应答,此应答也包含自身数据通讯初始序号,发送完后进入SYN-RECEVED状态 第三次握手:客户端收到同意连接的应答,向服务端发送确认报文。双方同时进入ESTABLISHED状态,连接成功建立
17、TCP的四次挥手
第一次挥手:客户端认为数据发送完成后,向服务端发送连接释放请求 第二次挥手:服务端收到释放请求后,确认不再接收客户端发送的数据 第三次挥手:如果服务端此时还有没发完的数据会继续发送,发送完后,服务端向客户端发送连接释放请求 第四次挥手:客户端收到释放请求后,向服务端发送确认应答,正式断开连接
18、Token是啥?
是啥?
Token(令牌)
,一般由uid + time +sign + 固定参数
组成
uid:用户唯一身份标识 time:当前时间戳 sign:签名 固定参数:可选,一些自定义的字符串
获取Token过程?
1、用户登录,服务端生成Token返回给客户端 2、客户端把Token保存在浏览器缓存中 3、客户端发送请求时把Token放在header中 4、服务端收到Token后,判断Tokne的准确性和时效性,通过就返回对应数据,不通过就返回401
作用?
抵抗CSRF 节省后端存储空间
19、如何无感刷新Token?
在响应拦截器中拦截401,并判断Token过期,调用刷新Token的接口,重置Token,实现无感刷新
20、跨域报错的时机?
客户端请求完服务端,服务端返回数据,到达浏览器时,报跨域错误
21、跨域的解决方案?
JSONP:只适用于GET请求,已被淘汰
Node中间件代理:跨域只是对于客户端的限制,但是不对服务端限制,所以可以先把接口发到代理服务端,然后转发到目标服务端
Nginx反向代理:类似于Node中间件转发,只不过这里是Nginx代理
Cors:后端开启Cors(Cross Orgin Resource Share)
22、XSS和CSRF
XSS
是什么
跨域脚本攻击
,一般指的是有人往网站注入恶意脚本,使之在网页中运行,从而盗取cookie等信息
可达到以下攻击:
获取页面数据,如DOM、cookie、LocalStorage DOS攻击,发送合理请求,占用服务器资源,使用户无法正常访问服务器 破坏页面结构 流量劫持(将链接指向某网站)
防御
对存储到后端的数据进行转义,禁止script
这种类似的脚本数据存储
CSRF
是什么?
跨站请求伪造
,攻击者诱导用户进入一个第三方网站,然后在第三方网站发送请求,同时会带走用户现有的登录状态,从而冒充用户执行请求操作
本质是利用Cookie会在同源请求中携带发送给服务器的特点,以此来实现用户的冒充
防御
同源检测:服务端对请求头中的origin和referer进行检测,但是这两个字段也可以伪造
使用Token:Token与Cookie不同的就是,Token是可以用户选择性发送,Cookie是主动携带
Samesite:设置Cookie的Samesite为严格模式,限制不被第三方网站使用Samesite
23、如何优化SEO?
提高网站权重,增强搜索引擎友好度
网站层级不要太深 合理使用语义化HTML标签 服务端渲染 减少HTTP请求,提升网站加载速度
结语
我是林三心,一个热心的前端菜鸟程序员。如果你上进,喜欢前端,想学习前端,那咱们可以交朋友,一起摸鱼哈哈,摸鱼群,关注我,拉你进群,有5000多名前端小伙伴在等着一起学习哦 -->
模拟面试、简历指导可私信找我,价格超级实惠~