跳转至

网络面试题

HTTP与Web安全

1. TCP三次握手和四次挥手过程

  • 三次握手: 建立连接
    1. SYN: 客户端发送SYN(同步序列编号)标志的数据包,请求建立连接。
    2. SYN-ACK: 服务器收到SYN后,回复一个SYN-ACK(同步确认)标志的数据包,表示同意建立连接。
    3. ACK: 客户端收到SYN-ACK后,发送一个ACK(确认)标志的数据包,表示连接已建立。
  • 四次挥手: 断开连接
    1. FIN: 客户端发送FIN(结束)标志的数据包,请求断开连接。
    2. ACK: 服务器收到FIN后,发送一个ACK标志的数据包,表示同意断开连接请求。
    3. FIN: 服务器发送一个FIN标志的数据包,请求断开连接。
    4. ACK: 客户端收到FIN后,发送一个ACK标志的数据包,表示连接已断开。

2. TCP与UDP区别?TCP 协议怎么保证可靠的,UDP 为什么不可靠?应用场景?

  • TCP: 面向连接、可靠、基于字节流的传输层协议。
  • UDP: 无连接、不可靠、基于数据报的传输层协议。

TCP如何保证可靠性: 校验和、序列号、确认应答、超时重传、流量控制、拥塞控制。

UDP为什么不可靠: 不保证消息交付、不保证交付顺序、不跟踪连接状态。

应用场景:

  • TCP: 文件传输、电子邮件、Web浏览
  • UDP: 在线游戏、视频会议、DNS

3. 滑动窗口、拥塞控制

  • 滑动窗口: TCP使用滑动窗口协议进行流量控制。
  • 拥塞控制: 防止过多的数据注入网络,导致网络过载。

4. GET和 POST的区别

  • GET: 从服务器获取数据,幂等,参数在URL中,不安全。
  • POST: 向服务器提交数据,非幂等,参数在请求体中,相对安全。

5. HTTP状态码有哪些,301和302有什么区别

  • 1xx: 信息性响应
  • 2xx: 成功响应
  • 3xx: 重定向
  • 4xx: 客户端错误
  • 5xx: 服务器错误

301 vs 302:

  • 301 Moved Permanently: 永久重定向
  • 302 Found: 临时重定向

6. 浏览器HTTP请求数目限制,怎么解决

  • 原因: 防止对服务器造成过大压力。
  • 解决方法: 合并文件、使用CDN、使用多个域名。

7. 长链接、短链接、如何断开长链接

  • 长链接: 一次TCP连接可以发送多个HTTP请求。
  • 短链接: 每个HTTP请求都需要建立一个新的TCP连接。
  • 断开长链接: 客户端或服务器端都可以发起关闭连接的请求。

8. HTTP 1.0&1.1&2区别

  • HTTP/1.0: 短链接,无Host头,不支持断点续传。
  • HTTP/1.1: 长链接,有Host头,支持断点续传,支持管道化。
  • HTTP/2: 二进制分帧,多路复用,头部压缩,服务器推送。

9. HTTP2特性

  • 二进制分帧: 将HTTP消息分解为独立的帧。
  • 多路复用: 在一个TCP连接上并行发送多个请求和响应。
  • 头部压缩: 使用HPACK算法压缩HTTP头部。
  • 服务器推送: 服务器可以主动向客户端推送资源。

10. HTTP2如何加密

HTTP/2 本身不要求加密,但浏览器普遍要求HTTP/2必须运行在HTTPS之上。

11. 缓存的处理过程?强缓存/弱缓存?

  • 强缓存: 浏览器不会向服务器发送请求,直接从本地缓存中读取资源。通过 ExpiresCache-Control 控制。
  • 协商缓存: 浏览器向服务器发送请求,服务器根据请求头中的 Last-ModifiedETag 判断资源是否更新,如果未更新,返回304状态码,浏览器从本地缓存中读取资源。

12. 请求头字段和响应头字段,如何设置不用缓存

Cache-Control: no-cache, no-store, must-revalidate

13. HTTPS加密过程、证书是什么

  • HTTPS加密过程: TLS/SSL握手
  • 证书: 由受信任的证书颁发机构(CA)颁发的数字证书,用于验证服务器的身份。

14. 登录鉴权有哪些方式?登录持久化怎么实现的?

  • 鉴权方式: Cookie-Session, Token (JWT), OAuth
  • 持久化: Cookie, localStorage, sessionStorage

15. JWT,access token、refresh token的作用分别是什么,存放在哪儿,具体流程?

  • JWT (JSON Web Token): 一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为JSON对象。
  • access_token: 用于访问受保护的资源。
  • refresh_token: 用于获取新的 access_token
  • 存放位置: Cookie, localStorage
  • 流程: 客户端使用用户名和密码请求 access_tokenrefresh_tokenaccess_token 用于访问API,过期后使用 refresh_token 获取新的 access_token

其他

  • URL 输入的过程: DNS解析 -> TCP连接 -> 发送HTTP请求 -> 服务器处理请求并返回HTTP报文 -> 浏览器解析渲染页面 -> 断开连接
  • DNS 解析过程: 浏览器缓存 -> 系统缓存 -> 路由器缓存 -> ISP DNS缓存 -> 根域名服务器 -> ...

参考资料