查看原文
其他

【面经】面试中遇到频率最高的23道HTTP面试题,需要全都背!

林三心不学挖掘机 前端之神 2023-02-25

模拟面试、简历指导可私信找我,最低的价格收获最高的指导~

前言

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。

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多名前端小伙伴在等着一起学习哦 -->

模拟面试、简历指导可私信找我,价格超级实惠~

image.png


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存