前端面试-网络协议篇

1.http网络协议中post和get有什么区别

在HTTP网络协议中,POST和GET主要有以下区别:

  • 参数传递方式
    • GET :参数附加在URL后面,如example.com?key1=value1&key2=value2
    • POST:参数放在HTTP请求体中。
  • 数据长度限制
    • GET:由于浏览器和服务器对URL长度有限制,一般能传递的数据量较小。
    • POST:理论上没有数据长度限制。
  • 安全性
    • GET:参数暴露在URL中,安全性较差,不适合传递敏感信息。
    • POST:参数在请求体中,相对更安全。
  • 缓存
    • GET:可以被浏览器缓存,因为参数在URL上,便于缓存识别。
    • POST:一般不会被缓存。
  • 应用场景
    • GET:常用于获取数据,如查询列表。
    • POST:常用于向服务器提交数据,如用户注册、登录时提交表单。

2.UDP和TCP的区别

UDP(User Datagram Protocol)和 TCP(Transmission Control Protocol)是两种常见的传输层协议,它们在数据传输方式、可靠性和应用场景等方面有显著区别。

选择 TCP 还是 UDP 取决于具体需求:如果需要可靠性和数据完整性,选择 TCP;如果需要高效率和实时性,选择 UDP。

3.TCP协议的三次握手和四次挥手

TCP 三次握手
  1. 客户端向服务器发送 SYN 包:客户端向服务器发送一个 SYN (同步序列编号)包,请求建立连接,此时客户端进入 SYN_SENT 状态。这个包中包含客户端初始的序列号(Sequence Number)。
  2. 服务器回复 SYN + ACK 包:服务器收到 SYN 包后,向客户端发送一个 SYN + ACK 包,表示同意建立连接。服务器进入 SYN_RCVD 状态。这个包中包含服务器的初始序列号以及对客户端 SYN 包的确认号(Acknowledgment Number)。
  3. 客户端发送 ACK 包:客户端收到 SYN + ACK 包后,向服务器发送 ACK 包进行确认。客户端进入 ESTABLISHED 状态。服务器收到 ACK 包后也进入 ESTABLISHED 状态,此时连接建立成功。
TCP 三次握手的目的
  1. 确保双方通信能力正常:通过三次握手,客户端和服务器可以确认彼此都能正常发送和接收数据,确保通信的可靠性。
  2. 同步初始序列号:交换初始序列号(Sequence Number),为后续数据传输提供基础,确保数据按顺序传输且不重复。
  3. 防止已失效的连接请求干扰:避免网络中延迟的旧连接请求突然到达服务器,导致服务器误认为是新的连接请求。
TCP 四次挥手
  1. 客户端发送 FIN 包:客户端向服务器发送 FIN (结束标志)包,表示请求关闭连接,此时客户端进入 FIN_WAIT_1 状态。
  2. 服务器回复 ACK 包:服务器收到 FIN 包后,向客户端发送 ACK 包进行确认,服务器进入 CLOSE_WAIT 状态。客户端收到 ACK 包后进入 FIN_WAIT_2 状态。
  3. 服务器发送 FIN 包:服务器处理完剩余数据后,向客户端发送 FIN 包,表示同意关闭连接,服务器进入 LAST_ACK 状态 。
  4. 客户端回复 ACK 包:客户端收到 FIN 包后,向服务器发送 ACK 包进行确认,客户端进入 TIME_WAIT 状态。服务器收到 ACK 包后,关闭连接进入 CLOSED 状态。客户端在 TIME_WAIT 状态等待一段时间(2MSL,最大段生命周期)后也进入 CLOSED 状态。
TCP 四次挥手的目的
  1. 确保双方数据发送完毕:通过四次挥手,双方确认彼此都没有数据需要发送,确保数据传输的完整性。
  2. 安全关闭连接:双方确认关闭连接,避免一方突然关闭导致另一方还在发送数据,造成数据丢失或错误。
  3. 释放资源:关闭连接后,释放双方占用的网络资源,如端口、内存等,提高系统效率。

4.http常见访问状态码有哪些

HTTP 状态码是服务器对客户端请求的响应结果,用于表示请求的处理状态。以下是常见的 HTTP 状态码及其含义:

1xx(信息类状态码)
  • 100 Continue:服务器已收到请求头,客户端应继续发送请求体。
  • 101 Switching Protocols:服务器同意切换协议(如从 HTTP 切换到 WebSocket)。
2xx(成功类状态码)
  • 200 OK:请求成功,响应中包含请求的结果。
  • 201 Created:请求成功,并在服务器上创建了新资源。
  • 202 Accepted:请求已被接受,但尚未处理完成。
  • 204 No Content:请求成功,但响应中无内容。
  • **206 Partial Content:**成功处理了客户端的部分请求,常见于断点续传。
3xx(重定向类状态码)
  • 301 Moved Permanently:请求的资源已永久移动到新位置。
  • 302 Found:请求的资源临时移动到新位置。
  • 304 Not Modified:资源未修改,客户端可使用缓存版本。
4xx(客户端错误类状态码)
  • 400 Bad Request:请求无效,服务器无法理解。
  • 401 Unauthorized:请求需要身份验证。
  • 403 Forbidden:服务器拒绝请求,客户端无权限访问。
  • 404 Not Found:请求的资源不存在。
  • 405 Method Not Allowed:请求方法不被允许(如 GET 请求用于仅支持 POST 的资源)。
5xx(服务器错误类状态码)
  • 500 Internal Server Error:服务器内部错误,无法完成请求。
  • 502 Bad Gateway:服务器作为网关或代理时,从上游服务器收到无效响应。
  • 503 Service Unavailable:服务器暂时无法处理请求(如过载或维护)。
  • 504 Gateway Timeout:服务器作为网关或代理时,未及时从上游服务器收到响应。
常见状态码的典型场景
  • 200 OK:访问成功,如加载网页或获取数据。
  • 301/302:网站重定向,如旧网址跳转到新网址。
  • 404:访问的资源不存在,如输入错误的 URL。
  • 500:服务器内部错误,如代码 bug 或数据库故障。
  • 503:服务器暂时不可用,如维护或过载。

5.HTTP和HTTPS的区别

HTTP 和 HTTPS 是两种常见的网络通信协议,主要区别在于安全性实现方式

HTTPS 是 HTTP 的安全升级版,现代网站普遍推荐使用 HTTPS 以保护用户隐私和数据安全。

6.什么是CDN

CDN(Content Delivery Network,内容分发网络)是一种分布式网络架构,旨在加速内容传输提升用户体验

1. 核心概念
  • CDN 通过将内容(如图片、视频、CSS、JavaScript 等)缓存到全球分布的边缘节点,使用户可以从离自己最近的节点获取内容,从而减少延迟、提高访问速度。
2. 工作原理
  1. 内容缓存
    • 源服务器将内容分发到 CDN 的多个边缘节点。
  2. 用户请求
    • 用户访问网站时,请求会被重定向到离用户最近的边缘节点。
  3. 内容返回
    • 如果边缘节点缓存了所需内容,直接返回给用户;否则,从源服务器获取内容并缓存到边缘节点。
3. 主要功能
  1. 加速内容传输
    • 通过就近访问边缘节点,减少网络延迟,提升加载速度。
  2. 减轻源服务器负载
    • 大多数请求由边缘节点处理,降低源服务器的压力。
  3. 提高可用性
    • 即使源服务器故障,用户仍可从边缘节点获取缓存内容。
  4. 抵御网络攻击
    • CDN 可以提供 DDoS 防护、WAF(Web 应用防火墙)等安全功能。
4. 应用场景
  1. 静态资源加速
    • 如图片、CSS、JavaScript 等文件的快速加载。
  2. 视频和直播流媒体
    • 提供流畅的视频播放体验。
  3. 软件和游戏下载
    • 加速大文件的分发。
  4. 全球业务扩展
    • 为全球用户提供一致的访问体验。
5. 优势
  • 更快的内容加载:减少延迟,提升用户体验。
  • 更高的可靠性:通过冗余节点提高服务可用性。
  • 更强的安全性:提供 DDoS 防护、WAF 等安全功能。
  • 更低的成本:减少带宽消耗和服务器负载。

7.什么是WebSocket

WebSocket 是一种基于 TCP 的通信协议,用于在客户端(如浏览器)和服务器之间实现全双工、低延迟的实时通信。

1. 核心特点
  1. 全双工通信
    • 客户端和服务器可以同时发送和接收数据,无需等待对方完成。
  2. 低延迟
    • 基于长连接,无需频繁建立和断开连接,减少了通信开销。
  3. 实时性
    • 支持实时数据传输,适用于需要即时响应的场景。
  4. 基于 HTTP/HTTPS
    • 通过 HTTP/HTTPS 协议升级到 WebSocket 协议,兼容现有网络基础设施。
2.与HTTP的区别
相关推荐
看,未来36 分钟前
Apipost 与 Postman 工具实践指南:WebSocket调试与动态参数测试
websocket·测试工具·postman
Nicole Potter2 小时前
请说明C#中的List是如何扩容的?
开发语言·面试·c#
ACGkaka_4 小时前
抓包工具(三)Wireshark代理抓包Java程序的HTTPS请求
java·https·wireshark
拉不动的猪4 小时前
刷刷题16
前端·javascript·面试
支撑前端荣耀4 小时前
基于 Vue 的响应式瀑布流实现全景解析
前端·javascript·面试
绿色果酱5 小时前
利用Postman和Apipost进行WebSocket调试和文档设计
websocket·测试工具·yapi·postman
01_6 小时前
力扣hot100——LRU缓存(面试高频考题)
leetcode·缓存·面试·lru
ktkiko116 小时前
Websocket——心跳检测
网络·websocket·网络协议
小天努力学java7 小时前
【面试系列】Java开发--AI常见面试题
java·人工智能·面试