计算机网络 HTTP篇常见面试题总结
HTTP各版本区别
HTTP 1.0
- 无状态、无连接:每次请求都需要建立新的 TCP,处理完后立即关闭,导致开销较大。
- 队头阻塞:每个请求必须按照顺序依次处理,前面的请求未完成,后面的请求只能等待,减低了并发效率。
- 不支持持久连接:每个请求都建立一个新的 TCP 连接,增加了服务器的负担
HTTP 1.1
- 持久连接:引入了 Keep - Alive 机制,多个请求可以复用同一个 TCP 连接,介绍了建立连接的开销。
- 管道化:允许在同一个 TCP 连接上同时发送多个请求,提高了并发效率。
- Host 字段:可以在同一个 IP 地址上允许多个虚拟主机。
- 断点续传:支持文件传输中断后从断点处继续传输。
HTTP 2.0
- 二进制分帧:将 HTTP 报文分割为更小的二进制,提高了传输效率,并支持多路复用。
- 头部压缩:减少了 HTTP 头部的大小,降低了网络开销。
- 服务器推送:服务器可以主动向客户端推送资源,减少了客户端的请求次数。
- 多路复用:在一个 TCP 连接上可以同时发送多个请求和响应,解决了 HTTP 1.1 的队头阻塞问题。
HTTP 3.0
- 基于 QUIC 协议:使用 UDP 协议,相较于 TCP 的可靠性,QUIC 通过自身实现可靠传输,减少了 RTT。
- 多路复用:在一个 QUIC 连接上可以同时传输多个请求和响应,并且支持流优先级。
- 更快的连接建立:减少了 TCP 的三次握手和 TLS 的握手时间。
- 更低的延迟:由于 QUIC 协议的特性,HTTP 3.0 具有很低的延迟。
常见HTTP状态码
1xx: 信息响应
- 100 Continue: 服务器已接收请求的初步部分,客户端应继续请求。
- 101 Switching Protocols: 服务器同意切换协议,如从 HTTP 切换到 WebSocket。
2xx: 成功
- 200 OK: 请求成功,服务器返回所请求的资源或数据。
- 201 Created: 请求成功并创建了新的资源,常用于 POST 请求。
- 204 No Content: 请求成功但服务器不返回任何内容,常用于删除操作。
3xx: 重定向
- 301 Moved Permanently: 资源已永久移动到新的 URL,客户端应使用新 URL 访问。
- 302 Found: 资源临时移动到新的 URL,客户端应继续使用原来的 URL。
- 304 Not Modified: 资源未修改,客户端可以使用缓存版本。
4xx: 客户端错误
- 400 Bad Request: 请求无效或语法错误,服务器无法处理。
- 401 Unauthorized: 请求需要身份验证,客户端未提供有效的凭证。
- 403 Forbidden: 服务器理解请求但拒绝执行,通常是权限问题。
- 404 Not Found: 请求的资源在服务器上未找到。
5xx: 服务器错误
- 500 Internal Server Error: 服务器内部错误,无法完成请求。
- 502 Bad Gateway: 服务器作为网关或代理,从上游服务器接收到无效响应。
- 503 Service Unavailable: 服务器暂时无法处理请求,通常是因为过载或维护。
HTTP请求内容组成
HTTP 请求组成:
- 请求行(Request Line):包含请求方法(如 GET、POST)、请求的资源路径(如 /index.html )、以及 HTTP 协议版本(如 HTTP/1.1)。
- 请求头(Request Headers):包含各种键值对,用于传递客户端环境、请求内容、认证信息等。
- 空行(Blank Line):用于分隔请求头和请求体。
- 请求体(Request Body):通常在 POST、PUT 等方法中存在,包含需要发送到服务器的数据。
请求头用于传递附加信息:
1. 通用头(General Headers)
Cache-Control
:控制缓存策略(如no-cache
、max-age=3600
)Connection
:控制连接状态(如keep-alive
、close
)Date
:请求时间(如Wed, 30 May 2025 12:00:00 GMT
)
2. 请求头(Request-Specific Headers)
Host
:目标服务器域名(如www.example.com
)User-Agent
:客户端信息(如浏览器类型、操作系统)Accept
:客户端可接收的响应格式(如application/json
、text/html
)Accept-Language
:客户端语言偏好(如zh-CN,en-US;q=0.8
)Accept-Encoding
:客户端支持的压缩格式(如gzip
、deflate
)Cookie
:存储的会话信息(如session_id=123456
)Authorization
:身份验证信息(如Bearer token123
)
3. 实体头(Entity Headers)
Content-Type
:请求体的媒体类型(如application/json
、multipart/form-data
)Content-Length
:请求体的长度(如128
)Content-Encoding
:请求体的编码方式(如gzip
)
请求体的类型由 Content-Type
头决定,常见类型如下:
1. 无请求体(No Body)
- 适用方法:
GET
、HEAD
、DELETE
、OPTIONS
- 示例:
GET /api/users HTTP/1.1 Host: www.example.com
2. 表单数据(Form Data)
- Content-Type:
application/x-www-form-urlencoded
- 格式:键值对(
key1=value1&key2=value2
) - 示例:
POST /login HTTP/1.1 Host: www.example.com Content-Type: application/x-www-form-urlencoded Content-Length: 27username=admin&password=123456
3. 多部分表单数据(Multipart Form Data)
- Content-Type:
multipart/form-data; boundary=----WebKitFormBoundary123456
- 用途:上传文件或复杂表单
- 示例:
POST /upload HTTP/1.1 Host: www.example.com Content-Type: multipart/form-data; boundary=----WebKitFormBoundary123456------WebKitFormBoundary123456 Content-Disposition: form-data; name="username"admin ------WebKitFormBoundary123456 Content-Disposition: form-data; name="avatar"; filename="photo.jpg" Content-Type: image/jpeg[二进制文件内容] ------WebKitFormBoundary123456--
4. JSON 数据
- Content-Type:
application/json
- 格式:JSON 对象
- 示例:
POST /api/users HTTP/1.1 Host: www.example.com Content-Type: application/json Content-Length: 27{"name": "John", "age": 30}
5. XML 数据
- Content-Type:
application/xml
或text/xml
- 格式:XML 文档
- 示例:
POST /api/users HTTP/1.1 Host: www.example.com Content-Type: application/xml Content-Length: 81<user><name>John</name><age>30</age> </user>
6. 原始数据(Raw Data)
- Content-Type:
text/plain
、application/javascript
等 - 用途:传输任意格式文本
- 示例:
POST /api/script HTTP/1.1 Host: www.example.com Content-Type: text/plain Content-Length: 10Hello World
HTTP中GET和POST区别
从 HTTP 的定义来看:
- GET:用于获取资源,通常用于请求数据而不改变服务器状态。
- POST:用于提交数据到服务器,通常会改变服务器的状态或产生副作用(如创建或更新资源)。
由于 HTTP 和浏览器等规定,它们在应用过程中会出现一些区别:
参数传递方式:
- GET:参数通过 URL 拼接传递,暴露在请求 URL 中,具有可见性,长度有限(取决于浏览器和服务器)。
- POST:参数放在请求体中,通常不可见且长度理论上没有限制,更适合传递大量数据(但是注意,POST 也可以在 URL 上放参数!)。
安全性:
- GET:参数可见,数据容易暴露在浏览器历史记录、日志和缓存中,不适合传递敏感信息。
- POST:数据放在请求体中,相对安全,但需要 HTTPS 才能保证数据加密传输。
幂等性:
- GET:幂等(重复请求不会改变服务器状态)。
- POST:非幂等(多次请求可能导致重复创建资源或执行多次相同操作)。
GET 和 POST 的数据传输方式与限制
- URL 长度限制:GET 请求中的参数通过 URL 传递,受 URL 长度限制。不同浏览器和服务器对 URL 长度限制不同,一般为 2048 字节左右,因此不适合大数据传输。
- POST 请求体限制:POST 请求的数据放在请求体中,理论上无长度限制,适合传输较多的数据。但实际中服务器对请求体长度有配置限制,如 Nginx 默认限制为 1MB,可根据需求调整。
GET 和 POST 的数据安全性差异
- GET 请求暴露数据:由于 GET 请求的参数出现在 URL 中,可能被浏览器缓存、日志记录或历史记录保存,增加了信息泄露的风险,不适合传输敏感信息,如用户名、密码等。
- POST 请求相对安全:POST 请求数据位于请求体中,尽管这并不提供加密保护,但比 URL 中传递更隐蔽。配合 HTTPS 加密传输可进一步确保数据安全。
缓存机制的不同
- GET 请求可缓存:GET 请求可以被浏览器和 CDN 缓存,当请求同一个 URL 时可以直接返回缓存内容,减少服务器负载。适用于不频繁变动的资源,比如图片、静态页面。
- POST 请求默认不缓存:大部分浏览器和缓存服务器不缓存 POST 请求,主要因为 POST 请求通常会对服务器数据产生影响(如创建、修改数据),需要确保请求每次都传递到服务器。
HTTP和HTTPS区别
数据传输安全性:
- HTTP:数据以明文传输,容易被窃听、篡改。
- HTTPS:通过 SSL/TLS 协议对数据进行加密传输,提供数据机密性和完整性保障。
端口号:
- HTTP:默认使用端口 80。
- HTTPS:默认使用端口 443。
性能:
- HTTP:无加密过程,连接建立速度稍快。
- HTTPS:基于 HTTP 上又加了 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)协议来实现的加密传输,加解密过程增加了计算开销,握手时间较长,但现代硬件和协议优化已使性能差距减小。
SEO 影响:
- HTTP:搜索引擎一般会降低未加密站点的排名。
- HTTPS:搜索引擎更倾向于优先展示 HTTPS 网站。
HTTPS握手过程
TLS 握手过程概述
TLS 握手是客户端与服务器建立安全连接的关键步骤,主要目的是:
- 验证双方身份(通常验证服务器身份)。
- 协商加密算法和密钥(对称密钥和非对称密钥)。
- 确保通信内容的机密性和完整性。
基于 RSA 算法的 TLS 握手流程
核心流程(简化版):
-
客户端发起请求(ClientHello)
- 客户端发送支持的 TLS 版本、加密算法列表(如 RSA 相关套件)、随机数(
Client Random
)等信息。
- 客户端发送支持的 TLS 版本、加密算法列表(如 RSA 相关套件)、随机数(
-
服务器响应(ServerHello)
- 服务器选择 TLS 版本、加密算法(如 RSA)、随机数(
Server Random
),并发送服务器证书(含 RSA 公钥)。
- 服务器选择 TLS 版本、加密算法(如 RSA)、随机数(
-
客户端验证服务器证书
- 客户端通过信任的 CA 验证服务器证书的合法性,提取服务器公钥。
-
客户端生成预主密钥(Pre-Master Secret)
- 客户端生成一个随机数作为预主密钥,用服务器公钥加密后发送给服务器(RSA 加密过程)。
-
服务器解密预主密钥
- 服务器用私钥解密获取预主密钥,结合双方随机数(
Client Random
和Server Random
)生成 主密钥(Master Secret)。
- 服务器用私钥解密获取预主密钥,结合双方随机数(
-
生成对称密钥
- 客户端和服务器分别根据主密钥生成用于加密通信的对称密钥(如 AES 密钥)。
-
验证握手完整性
- 双方发送握手结束消息,使用新生成的密钥对消息进行加密和校验,确保握手过程未被篡改。
基于 ECDHE 算法的 TLS 握手流程
核心流程(简化版):
-
客户端发起请求(ClientHello)
- 类似 RSA 流程,但支持的加密算法包含 ECDHE 相关套件(如 ECDHE-ECDSA-AES256-GCM-SHA384)。
-
服务器响应(ServerHello)
- 选择 ECDHE 算法,发送服务器证书(含 ECDSA 公钥或 RSA 公钥,取决于签名算法)、椭圆曲线参数、服务器端生成的椭圆曲线私钥对应的公钥(
Server PubKey
)。
- 选择 ECDHE 算法,发送服务器证书(含 ECDSA 公钥或 RSA 公钥,取决于签名算法)、椭圆曲线参数、服务器端生成的椭圆曲线私钥对应的公钥(
-
客户端验证服务器证书
- 验证证书合法性,提取服务器公钥。
-
客户端生成椭圆曲线密钥对
- 客户端生成临时椭圆曲线密钥对(
Client PrivKey
和Client PubKey
),发送Client PubKey
给服务器。
- 客户端生成临时椭圆曲线密钥对(
-
协商共享密钥(ECDHE 密钥交换)
- 客户端和服务器分别用对方的公钥与自己的私钥计算出 共享秘密(Shared Secret):
- 客户端:用
Server PubKey
和Client PrivKey
计算共享秘密。 - 服务器:用
Client PubKey
和Server PrivKey
计算共享秘密。
- 客户端:用
- 双方得到的共享秘密相同,结合随机数生成 预主密钥 和 主密钥。
- 客户端和服务器分别用对方的公钥与自己的私钥计算出 共享秘密(Shared Secret):
-
生成对称密钥
- 与 RSA 流程类似,基于主密钥生成对称加密密钥。
-
验证握手完整性
- 流程与 RSA 一致。
相关文章:
计算机网络 HTTP篇常见面试题总结
HTTP各版本区别 HTTP 1.0 无状态、无连接:每次请求都需要建立新的 TCP,处理完后立即关闭,导致开销较大。队头阻塞:每个请求必须按照顺序依次处理,前面的请求未完成,后面的请求只能等待,减低了…...

C++八股 —— 手撕线程池
文章目录 一、背景二、线程池实现1. 任务队列和工作线程2. 构造和析构函数3. 添加任务函数4. 完整代码 三、阻塞队列实现1. 基础队列2. 升级版队列 四、测试代码五、相关问题六、其他实现方式 来自:华为C一面:手撕线程池_哔哩哔哩_bilibili 华为海思&am…...

RPA如何支持跨平台和跨浏览器的自动化
RPA,即机器人流程自动化(Robotic Process Automation),正日益成为企业实现业务流程高效自动化的关键技术。在复杂的数字化环境中,跨平台和跨浏览器的自动化需求极为迫切,RPA 通过多种技术手段和策略来满足这…...

【笔记】Windows 成功部署 Suna 开源的通用人工智能代理项目部署日志
#工作记录 本地部署运行截图 kortix-ai/suna: Suna - 开源通用 AI 代理 项目概述 Suna 是一个完全开源的 AI 助手,通过自然对话帮助用户轻松完成研究、数据分析等日常任务。它结合了强大的功能和直观的界面,能够理解用户需求并提供结果。其强…...
关于ffplay在macos上运行奔溃的问题
这个问题大概是由于 MacOS 的问题引起的,奔溃的地方在 SDL2 的代码中,如果直接使用 brew 安装 SDL2就会遇到这个问题,所以需要修改 SDL2源码然后再编译安装。 我这里采用的是 origin/release-2.28.x 分支,修改部分如下࿱…...

Linux531rsync定时同步 再回忆
rsync定时同步 环境配置 关闭防火墙,selinux systemctl stop firewalld systemctl disable firewall setenforce 0 cat /etc/selinux/configpei SELINUXdisable设置主机名 systemctl set-hostname code systemctl set-hostname backup设置静态IP rsync由于要设…...
Elasticsearch 分析器介绍
在 Elasticsearch 的世界里,构建高效搜索引擎的关键一环,便是透彻理解分析器(Analyzer)的工作机制。一个优秀的搜索引擎,能够精准地返回与用户查询紧密相关的文档,而这背后,正是分析器在默默发挥着核心作用。它不仅负责处理待索引的文档,还在用户发起查询时,智能评估哪…...

【KWDB 创作者计划】_探秘浪潮KWDB数据库:从时间索引到前沿技术
探秘浪潮KWDB数据库:从时间索引到前沿技术 文章目录 探秘浪潮KWDB数据库:从时间索引到前沿技术引言1.浪潮KWDB数据库时间索引深度解析1.1时间索引工作原理1.2时间索引创建与管理实践 2.浪潮KWDB数据库前沿产品技术纵览2.1多模融合存储引擎2.2就地计算技术…...

安卓逆向篇LSP 模块HOOK 添加技术绕过检测算法解密逻辑验证
前置解释: 0 、 Magisk : 是当前 Android 社区用来获取 root 权限的主流方式开源工具 1 、 LSP 框架: XPosed 框架因只支持安卓 8 及以下,故高版本应使用 MagiskLSPosed 2 、 HOOK 技术: 钩子技术&…...
【SQL】关键字
ORDER BY ORDER BY(排序) 语句可以按照一个或多个列的值进行升序(ASC)或降序(DESC)排序。 MAX / MIN MAX() 函数返回一组值中的最大值。这个函数常用于数字字段,但也可以用于文本字段来找出按字典顺序最后的元素。 …...

第一节 51单片机概述
目录 一、单片机系统组成 (一)、单片机硬件系统 (二)单片机的软件系统 二、STC89C52单片机 (1)、基本信息 (2)、命名规则 (3)、单片机内部结构图 &am…...

Google car key:安全、便捷的汽车解锁新选择
有了兼容的汽车和 Android 手机,Google car key可让您将Android 手机用作车钥匙。您可以通过兼容的 Android 手机锁定、解锁、启动汽车并执行更多功能。但是,Google car key安全吗?它是如何工作的?如果我的手机电池没电了怎么办&a…...

720全景展示:VR全景的技术原理及应用
VR720全景展示:技术原理及应用探索 720全景技术,作为当前全球范围内迅速崛起流行的视觉新技术,为用户带来了全新的真实现场感和交互式的体验。凭借全方位、无死角的视觉展示特性,在VR(虚拟现实)领域中得到…...

定制一款国密浏览器(13):预置国密根证书到浏览器
由于国密算法没有得到国外的认可,所以 Chromium、Firefox 等浏览器均不支持国密算法。即使我们修改了 Chromium 的源码,增加了国密算法的支持,但还不能在浏览器中正常使用。因为这涉及到证书的信任问题,国密证书都是国内厂商签发的,国密根证书并没有集成到系统和浏览器中。…...

PowerBI企业运营分析——线性回归销售预测
PowerBI企业运营分析——线性回归销售预测 欢迎来到Powerbi小课堂,在竞争激烈的市场环境中,企业运营分析平台成为提升竞争力的核心工具。 该平台通过整合多源数据,实现关键指标的实时监控,从而迅速洞察业务动态,精准…...
大模型运维过程中常见的一些操作
1. 模型部署与环境配置 基础设施准备:部署 GPU 集群、TPU 等专用硬件,配置分布式计算环境(如 Kubernetes)。推理服务搭建:使用 Triton Inference Server、TensorFlow Serving 等框架部署模型,优化批处理和…...
C# 关于闭包与多线程结合使用
开头先看一篇文章:【转】编写高质量代码改善C#程序的157个建议——建议75:警惕线程不会立即启动 - 指间的徘徊 - 博客园d 摘抄: static int _id 0; static void Main() { for (int i 0; i < 10; i, _id) { Thread t new Thread…...

LangFuse:开源LLM工程平台的革新实践
文章目录 一 架构设计与技术栈二 增强型监控能力三 提示词工程支持(新增)四 性能优化实践五 LangFuse部署(docker)和代码集成5.1 LangFuse平台部署5.2 LangFuse代码集成和检测体验 一 架构设计与技术栈 LangFuse采用模块化架构设…...

新视角!经济学顶刊QJE用文本分析探究新技术扩散
美国圣路易斯联邦储备银行Aakash Kalyani、美国斯坦福大学与国家经济研究局Nicholas Bloom、英国伦敦商学院Marcela Carvalho和其合作者们共同研究的“The Diffusion of New Technologies(新技术的扩散)”在顶刊The Quarterly Journal of Economics中发表…...
微信小程序返回上一页监听
本文实现的是微信小程序在返回上一页时获取通知并自定义业务。 最简单的实现: 使用 wx.enableAlertBeforeUnload() 优点:快速接入 缺点:手势不能识别、无法自定义弹窗内容(仅询问) 方法二: page-conta…...

5月31日day41打卡
简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率 卷积操作常见流程如下: 1. 输入 → 卷积层 → Batch…...
“粽”览全局:分布式系统架构与实践深度解析(端午特别版)
第一部分:引言——技术世界的“端午”第二部分:分布式系统概述——粽子节点初探第三部分:核心技术详解——技术“粽子”大解构 粽叶篇:通信协议糯米篇:一致性算法馅料篇:任务调度与计算包扎篇:系…...

STM32G4 电机外设篇(一) GPIO+UART
目录 一、STM32G4 电机外设篇(一) GPIOUART1 GPIO1.1 STM32CUBEMX 配置以及Keil代码1.2 代码和实验现象 2 UART2.1 STM32CUBEMX 配置以及Keil代码2.2 代码和实验现象 附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^) 一、STM32G4 电机外设篇࿰…...
代理IP在云计算中的应用:技术演进与场景实践
一、技术融合的必然性:代理IP与云计算的协同效应 在数字化转型的浪潮中,云计算已成为企业IT架构的核心底座,而代理IP技术则作为网络访问的关键基础设施,两者在技术演进路径上呈现出深度融合的趋势。云计算的弹性资源池与代理IP的…...

Lua 的速度为什么比 Python 快
Lua 的执行速度通常比 Python 快,主要原因在于其解释器设计轻量、虚拟机效率高、内存管理策略更为精简,以及语言本身对动态特性的控制较严。其中,Lua 使用了 register-based 的虚拟机架构,而 Python(CPython࿰…...

【iOS】方法交换
方法交换 method-swizzling是什么相关API方法交换的风险method-swizzling使用过程中的一次性问题在当前类中进行方法交换类方法的方法交换 方法交换的应用 method-swizzling是什么 method-swizzling的含义是方法交换,他的主要作用是在运行的时候将一个方法的实现替…...
跑步相关术语解释
老婆一直问我PB是啥意思,写个文章解释下。 1. 成绩类 PB (Personal Best):个人最好成绩,指在特定距离(如10K、全马)中的最快完赛时间 。PW (Personal Worst)࿱…...

数据结构:线性表的基本操作与链式表达
个人主页 文章专栏 成名之作——赛博算命之梅花易数的Java实现 陆续回三中,忘回漏回滴滴~感谢各位大佬的支持 一.线性表的定义和基本操作 1.1定义 线性表是具有相同数据类型的n个数据元素的有序数列,n为表长 第一个元素叫表头元素,除了他…...

C++:设计模式--工厂模式
更多内容:XiaoJ的知识星球 目录 1.简单工厂模式1.1 简单工厂1.2 实现步骤1.3 实现代码1.4 优缺点 2.工厂模式2.1 工厂模式2.2 实现步骤2.3 实现代码2.4 优缺点 3.抽象工厂模式3.1 抽象工厂模式3.2 实现步骤3.3 实现代码3.4 优缺点 1.简单工厂模式 . 1.1 简单工厂 …...
【前端优化】使用speed-measure-webpack-plugin分析前端运行、打包耗时,优化项目
记录下 项目安装speed-measure-webpack-plugin 打包分析: 修改vue.config.js文件 speed-measure-webpack-plugin进行构建速度分析,需要包裹整个 configureWebpack 配置 const originalConfig {publicPath: /,assetsDir: assets,parallel: true,devS…...