type
status
date
slug
summary
tags
category
icon
password
notion image
记录一些计网的面经知识点
记录一些计网的面经知识点

GET 和 POST 请求的区别

  1. 应用场景
      • GET:用于幂等请求,一般用于对服务器资源不会产生影响的场景,如请求网页资源。
      • POST:用于非幂等请求,一般用于对服务器资源产生影响的场景,如用户注册。
  1. 是否缓存:浏览器一般会缓存 GET 请求,而不会缓存 POST 请求。
  1. 报文格式
      • GET 请求的报文中实体部分为空。
      • POST 请求的报文中实体部分通常为向服务器发送的数据。
  1. 安全性GET 请求的参数可以放入 URL 中,因而相对不安全,因为 URL 会保留在历史记录中。
  1. 请求长度:浏览器对 URL 长度有限制,影响 GET 请求的长度。这个限制是浏览器规定的,并非 RFC 规定的。
  1. 参数类型POST 请求支持更多的数据类型。

POST 和 PUT 请求的区别

  • PUT 请求向服务器发送数据以修改数据内容,不会增加数据种类。即无论发送多少次 PUT 请求,数据种类不会改变(可以理解为更新数据)。
  • POST 请求向服务器发送数据,并且会改变数据种类或创建新的内容(可以理解为创建数据)。

常见的 HTTP 请求头和响应头

HTTP Request Header 常见的请求头
  1. Accept:浏览器能够处理的内容类型。
  1. Accept-Charset:浏览器能够显示的字符集。
  1. Accept-Encoding:浏览器能够处理的压缩编码。
  1. Accept-Language:浏览器当前设置的语言。
  1. Connection:浏览器与服务器之间连接的类型。
  1. Cookie:当前页面设置的任何 Cookie。
  1. Host:发出请求的页面所在的域。
  1. Referer:发出请求的页面的 URL。
  1. User-Agent:浏览器的用户代理字符串。
HTTP Responses Header 常见的响应头
  1. Date:表示消息发送的时间,时间的描述格式由 RFC 822 定义。
  1. Server:服务器名称。
  1. Connection:浏览器与服务器之间连接的类型。
  1. Cache-Control:控制 HTTP 缓存。
  1. Content-Type:表示后面的文档属于什么 MIME 类型。
常见的 Content-Type 类型
  1. application/x-www-form-urlencoded:浏览器的原生 form 表单。
  1. multipart/form-data:常见的 POST 提交方式,通常表单上传文件时使用。
  1. application/json:服务器消息主体是序列化后的 JSON 字符串。
  1. text/xml:提交 XML 格式的数据。

常见的 HTTP 请求方法

  1. GET:向服务器获取数据。
  1. POST:将实体提交到指定的资源,通常会造成服务器资源的修改。
  1. PUT:上传文件,更新数据。
  1. DELETE:删除服务器上的对象。
  1. HEAD:获取报文首部,与 GET 相比,不返回报文主体部分。
  1. OPTIONS:询问支持的请求方法,用来跨域请求。
  1. CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行 TCP 通信。
  1. TRACE:回显服务器收到的请求,主要用于测试或诊断。

HTTP 1.1 和 HTTP 2.0 的区别

  1. 二进制协议HTTP/2 是一个二进制协议,头信息和数据体都是二进制,统称为“帧”,分为头信息帧和数据帧。帧是实现多路复用的基础。
  1. 多路复用HTTP/2 实现了多路复用,客户端和服务器可以同时发送多个请求和回应,且不用按顺序发送,避免了“队头堵塞”的问题。
  1. 数据流HTTP/2 使用了数据流的概念,不按顺序发送数据包。每个请求或回应的数据包统称为一个数据流,并有独立编号,用来区分数据流。
  1. 头信息压缩HTTP/2 实现了头信息压缩。头信息使用 gzipcompress 压缩,并且客户端和服务器共同维护一张头信息表,字段存入表中,生成索引号。以后不发送同样字段,只发送索引号,以提高速度。
  1. 服务器推送HTTP/2 允许服务器未经请求,主动向客户端推送资源,减少延迟时间。注意 HTTP/2 推送的都是静态资源,不同于 WebSocket 或使用 SSE 方法推送即时数据。

HTTP 和 HTTPS 协议的区别

  1. CA 证书:HTTPS 协议需要 CA 证书,费用较高;而 HTTP 协议不需要。
  1. 传输方式:HTTP 协议是超文本传输协议,信息以明文传输;HTTPS 则是 SSL 加密传输协议,更加安全。
  1. 连接和端口:HTTP 协议使用的端口是 80,HTTPS 协议使用的端口是 443。
  1. 状态:HTTP 协议连接简单,是无状态的;HTTPS 协议由 SSL 和 HTTP 协议构建,可进行加密传输和身份认证。

HTTP2 的头部压缩算法

HTTP/2 的头部压缩是 HPACK 算法。在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,采用哈夫曼编码来压缩整数和字符串,可以达到 50%~90% 的高压缩率。

HTTP 3.0

HTTP/3 基于 UDP 协议,实现了类似于 TCP 的多路复用数据流、传输可靠性等功能,这套功能称为 QUIC 协议
  1. 流量控制与传输可靠性:QUIC 在 UDP 的基础上增加了一层来保证数据传输的可靠性,提供数据包重传、拥塞控制及其他 TCP 特性。
  1. 集成 TLS 加密功能:QUIC 使用 TLS 1.3,减少了握手所需的 RTT 数。
  1. 多路复用:同一物理连接上可有多个独立的逻辑数据流,实现数据流的单独传输,解决 TCP 的队头阻塞问题。
  1. 快速握手:基于 UDP,可使用 0 ~ 1 个 RTT 来建立连接。

HTTPS 协议

  • HTTPS(Hypertext Transfer Protocol Secure) 是一种通过计算机网络进行安全通信的传输协议。它通过 HTTP 进行通信,利用 SSL/TLS 来加密数据包。
  • HTTPS 的主要目的是为网站服务器提供身份认证,保护交换数据的隐私与完整性。
  • 相比于采用明文传输的 HTTP 协议,HTTPS 使用 TLS/SSL 来进行身份验证、信息加密和完整性校验,从而避免信息窃听、篡改和劫持的风险。
  • 安全层的主要职责是对发起的 HTTP 请求的数据进行加密操作,并对接收到的 HTTP 内容进行解密操作。

HTTPS 通信(握手)过程

  1. 客户端请求:客户端向服务器发起请求,请求中包含协议版本号、生成的随机数及客户端支持的加密方法。
  1. 服务器响应:服务器接收到请求后,确认加密方法,提供服务器证书及生成的随机数。
  1. 客户端验证:客户端确认服务器证书有效后,生成新的随机数,使用数字证书中的公钥加密随机数并发送给服务器,同时提供前面所有内容的哈希值供服务器检验。
  1. 服务器解密:服务器使用私钥解密客户端发送的随机数,并提供前面内容的哈希值供客户端检验。
  1. 建立对话秘钥:客户端和服务器根据约定的加密方法使用三个随机数生成对话秘钥,后续对话过程使用该秘钥加密信息。

DNS 完整的查询过程

  1. 浏览器缓存查询:首先会在浏览器的缓存中查找对应的 IP 地址,如果找到,直接返回结果;若未找到,继续下一步。
  1. 本地 DNS 查询:将请求发送给本地 DNS 服务器,在本地域名服务器缓存中查询,如果找到结果,则返回;若未找到,继续下一步。
  1. 根域名服务器查询:本地 DNS 服务器向根域名服务器发送请求,根域名服务器返回所查询域的顶级域名服务器地址。
  1. 顶级域名服务器查询:本地 DNS 服务器向顶级域名服务器发送请求,接收请求的服务器查询自己的缓存,若有记录,则返回查询结果;若无记录,则返回相关下一级的权威域名服务器的地址。
  1. 权威域名服务器查询:本地 DNS 服务器向权威域名服务器发送请求,权威域名服务器返回对应的结果。
  1. 缓存结果:本地 DNS 服务器将返回结果保存在缓存中,以便下次使用。
  1. 返回结果:本地 DNS 服务器将最终结果返回给浏览器。
例如,要查询 www.baidu.com 的 IP 地址,首先在浏览器的缓存中查找该域名的缓存,若不存在,则将请求发送到本地 DNS 服务器。本地 DNS 服务器查询缓存是否存在该域名的记录,若不存在,则向根域名服务器发送请求,获取负责 .com 的顶级域名服务器 IP 地址列表。接着,本地 DNS 服务器向顶级域名服务器发送请求,获取负责 .baidu 的权威域名服务器 IP 地址列表。最后,本地 DNS 服务器向权威域名服务器发送请求,获取 www.baidu.com 对应的 IP 地址列表。

OSI 七层模型

OS参考模型
各层的解释
应用层
为应用程序提供服务
表示层
数据格式转化、数据加密
会话层
建立、管理和维护会话
传输层
建立、管理和维护端到端的连接
网络层
IP选址及路由选择
数据链路层
提供介质访问和链路管理
物理层
物理层

TCP 的三次握手和四次挥手

三次握手
notion image
第一次握手:SYN
  • 客户端向服务器发送一个SYN(Synchronize Sequence Number)报文,表示希望建立连接,并发送一个初始序列号 seq=x
第二次握手:SYN-ACK
  • 服务器收到SYN报文后,确认收到了客户端的请求,并向客户端发送一个SYN-ACK(SYN acknowledgment)报文。这个报文包含服务器的初始序列号 seq=y,并对客户端的SYN报文进行确认 ack=x+1
第三次握手:ACK
  • 客户端收到SYN-ACK报文后,向服务器发送一个ACK(Acknowledgment)报文,确认服务器的SYN报文 ack=y+1,并且开始传输数据。此时,TCP连接建立完成。
三次握手:
  1. A:是B吗?我要跟你通信,听得到我说话吗?
  1. B:可以通信,你听得到我说话吗?
  1. A:我也听得到。
四次挥手
notion image
第一次挥手:FIN
  • 客户端向服务器发送一个FIN(Finish)报文,表示客户端不再发送数据,但可以继续接收数据,并请求关闭连接。此时,客户端进入 FIN_WAIT_1 状态。
第二次挥手:ACK
  • 服务器收到FIN报文后,向客户端发送一个ACK报文,确认已收到客户端的请求,并表示自己还有数据要发送。客户端收到ACK报文后进入 FIN_WAIT_2 状态。
第三次挥手:FIN
  • 服务器向客户端发送一个FIN报文,表示服务器的数据已经发送完毕,并请求关闭连接。此时,服务器进入 CLOSE_WAIT 状态。
第四次挥手:ACK
  • 客户端收到FIN报文后,向服务器发送一个ACK报文,确认已收到服务器的FIN报文,并进入 TIME_WAIT 状态,等待一段时间以确保服务器收到ACK报文后,再彻底关闭连接。服务器收到ACK报文后关闭连接,客户端在等待时间结束后也关闭连接。
四次挥手:
  1. A:呼叫B,我要跟你断开。
  1. B:知道了,等一下我还有话没说完
  1. B:我说完了,可以断开了
  1. A:好的
哈夫曼树编码前端工程化面经
Loading...
Areufm
Areufm
一个普通的干饭人🍚
Announcement
🎉Welcome to my Blog
欢迎来到我的博客!
分享一些日常生活与文章
感谢关注 共同进步🥰