我的2023前端面试准备-网络篇

237 阅读10分钟

被裁之后休息了挺久的,最近也一直在准备面试重新找新工作,希望后面找工作的过程比较顺利吧,我们普通人没有办法去埋怨大环境不好,只能不断提高自己的核心竞争力,把准备过程中的面试题在此做记录

本人水平还是初级前端水平哦,总结的面试题有些只适用于初级前端,高级可能需要自己去做深入的理解

1、http有哪些常见的请求头和响应头

  • 常见http request head

    ①accept:浏览器可接受的类型和格式
    ②cookie:客户端发送的cookie信息
    ③referer:请求来源页面的URL,一般用于收集访问的统计数据,追踪用户的行为
    ④User-Agent:发送请求的用户代理信息,一般会包括浏览器的名称和版本
    ⑤cache-control缓存机制的控制指令,比如是否进行缓存,缓存的时间等
    ⑥content-type:请求体的媒体类型
    ⑦origin:表示请求的来源、起源或发起人

  • 常见的http response head

    ①Date:响应生成的时间
    ②Set-Cookie:服务器设置的Cookie信息
    ③access-control-allow-origin:指示哪些源(Origins)可以访问该响应
    ④access-control-allow-credentials:用于指示是否允许跨域请求携带凭据(如Cookie、HTTP身份验证等)

2、cookie是什么,,有哪些属性

  • 什么是cookie
    一种「小型文本文件」,指网站为了辨别用户身份而储存在用户本地终端的数据,为了解决 HTTP 无状态导致的问题而出现,大小不超过4KB

  • 有哪些属性

    ①Name/Value
    ②Expires:Cookie的过期时间。
    ③Max-age:设置在 Cookie 失效之前需要经过的秒数,优先级高于Expires
    ④Domain:指定可以送到的主机名,不能跨域。
    ⑤Path:Path 指定了一个 URL 路径,这个路径必须出现在要请求的资源的路径中才可以发送 Cookie 首部。

    Domain 和 Path 标识共同定义了 Cookie 的作用域:即 Cookie 应该发送给哪些 URL。

    ⑥Secure:标记为Secure 的 Cookie 只会被HTTPS协议加密过的请求发送给服务端。
    ⑦HttpOnly:设置 HttpOnly 属性可以防止客户端脚本通过 document.cookie 等方式访问 Cookie,有助于避免 XSS 攻击。
    ⑧SameSite:SameSite 属性可以让 Cookie 在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)

3、对Keep-Alive的理解

  • HTTP1.0 中默认是在每次请求/应答,客户端和服务器都要新建一个连接,完成之后立即断开连接,这就是短连接
  • 当使用Keep-Alive模式时,Keep-Alive功能使客户端到服务器端的连接持续有效,这就是长连接
  • HTTP1.0版本是默认没有Keep-alive的,所以要想连接得到保持,必须手动配置发送Connection: keep-alive字段。
  • HTTP1.1规定了默认保持长连接,数据传输完成了保持TCP连接不断开,等待在同域名下继续用这个通道传输数据。如果需要关闭,需要客户端发送Connection:close首部字段。

4、TCP和UDP的使用场景

  • TCP应用场景(可靠传输): 效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。例如:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。
  • UDP应用场景(不可靠传输): 效率要求相对高,对准确性要求相对低的场景。例如:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)。

5、http2.0相对于http1.1有哪些新特性

  • 新的二进制格式: HTTP 2.0 是一个二进制协议。在 HTTP1.1版中,报文的头信息必须是文本(ASCII 编码),数据体可以是文本,也可以是二进制。
  • 多路复用: HTTP 2.0 实现了多路复用, 仍然复用 TCP 连接,但是在一个连接里,客户端和服务器都可以同时发送多个请求或回应,而且不用按照顺序一一发送,这样就避免了"队头堵塞"的问题。
  • 数据流: HTTP2.0 使用了数据流的概念,因为 HTTP2.0 的数据包是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的请求。因此,必须要对数据包做标记,指出它属于哪个请求。
  • 头信息压缩: HTTP2.0 实现了头信息压缩,由于 HTTP 1.1 协议不带状态,每次请求都必须附上所有信息。http2.0对头信息进行压缩优化了http 1.1 请求的很多重复字段比如 Cookie 和 User Agent ,造成的带宽浪费,也影响速度。
  • 服务器推送: HTTP2.0允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送。使用服务器推送提前给客户端推送必要的资源,这样就可以相对减少一些延迟时间。

6、http和https的区别

  • 安全性不同:HTTP是以TCP做为传输层协议来保证数据的可靠性,在web浏览器和服务器之间传递信息是以明文方式传输,没有进行加密,而HTTPS是安全版本的HTTP,使用了SSL/TSL协议进行加密处理,相对更安全
  • 端口不一样:HTTP默认端口是80,HTTPS默认端口是443
  • 性能不一样:HTTPS需要设计加密和多次握手,性能方面不然HTTP
  • 收费区别:HTTPS协议是需要SSL证书的,需要收费,功能越强大证书费用越高

7、get和post的区别

  • 使用场景不同:get请求一般用来在那些不会对服务器资源产生影响的场景,比如请求一个网页的资源,post请求一般用来对服务器资源会产生影响的场景,比如注册用户
  • 是否缓存:浏览器一般会对get请求缓存,不会对post请求缓存
  • 发送的报文格式:get请求报文中的实体部分一般为空,而post请求的报文一般包含需要向服务器发送的数据
  • 参数传递的方式:get请求参数的传递一般是通过url携带参数发送,浏览器对url长度有限制,会影响get七八个球参数的传递,post是放在request body当中
  • 安全性:通过url传递参数的方式是不太安全的,请求的url会被保留在历史记录中,post传递参数的方式安全性比较高 -参数类型:get请求的参数必须是ASCII字符,post请求的参数类型更多

8、复杂请求和预检请求

CORS解决跨域问题,他的请求有简单和复杂请求,简单请求(get/post/head,content-type有三个特定的值),除了简单请求外的都是复杂请求,复杂请求需要新添一个http查询请求,也叫预检请求,他是一个options请求,用来告诉服务器是否允许跨域

9、常见的请求方式

  • get:向服务器获取数据
  • post:将实体提交到指定的资源,会造成对服务器资源的修改
  • put:上传文件,更新数据
  • delete:删除服务器上的对象
  • head:获取报文首部,与get相比,不会获取报文主体部分
  • connect:要求与代理服务器通信时建立隧道,使用隧道进行TCP通信
  • options:询问支持的请求方法,用来跨域请求
  • trace:回显服务器收到的请求,一般用来测试或者诊断

10、DNS完整查询过程

  • ①首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表

  • ②如果没有命中,就去查找操作系统中是否有缓存

  • ③如果没有命中,操作系统将域名发送给本地域名服务器,本地域名服务器通过一个递归查询的方法查找是否有缓存,有的话就直接返回查找结果

  • ④如果本地域名服务器没有命中,就去向根域名服务器去查找

    • 1)本地域名服务器向根域名服务器去发送请求,返回一个顶级域名服务器
    • 2)本地域名服务器拿到顶级域名服务器地址之后向他发送请求,返回一个权限域名服务器地址
    • 3)本地域名服务器向权限域名服务器地址发送请求,拿到对应的一个ip地址
  • ⑤本地域名服务器把这个IP地址返回给操作系统,同时操作系统对IP地址进行缓存

  • ⑥操作系统把IP地址返回给浏览器,浏览器也对这个ip地址进行缓存

  • ⑦最终浏览器就能拿到对应的ip地址,DNS域名查询过程结束

11、常见状态码

image.png

12、TLS/SSL

TLS/SSL全称安全传输层协议(Transport Layer Security), 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,所以使用HTTPS基本上不需要对HTTP页面进行太多的改造。TLS/SSL的功能实现主要依赖三类基本算法

①散列函数hash:基于散列函数验证信息的完整性

②对称加密:对称加密算法采用协商的秘钥对数据加密,即通信的双⽅都使⽤同⼀个秘钥进⾏加解密,对称加密虽然很简单性能也好,但是⽆法解决⾸次把秘钥发给对⽅的问题,很容易被⿊客拦截秘钥。

③非对称加密:非对称加密实现身份认证和秘钥协商

13、三次握手

TCP 建立连接的三次握手的过程

  • 首先客户端向服务器发送一个 SYN 连接请求报文段和一个随机序号
  • 服务端接收到请求后向服务器端发送一个 SYN ACK报文段,确认连接请求,并且也向客户端发送一个随机序号
  • 客户端接收服务器的确认应答后,进入连接建立的状态,同时向服务器也发送一个ACK 确认报文段,服务器端接收到确认后,也进入连接建立状态,此时双方的连接就建立起来了

image.png

14、webSocket

是HTML5提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接, 并进行双向数据传输。WebSocket 的出现就解决了半双工通信的弊端。它最大的特点是:服务器可以向客户端主动推送消息,客户端也可以主动向服务器推送消息。