Uvicorn 实战指南:从开发到部署的全流程解析
1. 为什么你需要 Uvicorn从 WSGI 到 ASGI 的进化如果你是从 Flask 或者 Django 这类传统框架过来的 Python 开发者你可能对gunicorn或者uWSGI这些名字非常熟悉。它们都是 WSGI 服务器在过去十几年里一直是 Python Web 应用部署的黄金标准。但不知道你有没有遇到过这样的场景你的应用需要处理大量并发的、耗时的 I/O 操作比如同时调用多个外部 API、读写大文件或者处理 WebSocket 长连接。这时候传统的同步服务器就会显得力不从心一个请求卡住了后面的请求都得排队等着性能瓶颈一下子就出来了。这就是 Uvicorn 登场的背景。它不是另一个 WSGI 服务器而是一个ASGI服务器。ASGI 你可以理解为 WSGI 的“异步升级版”。它最大的魔力在于“非阻塞”。想象一下你的服务器是一个餐厅服务员Worker。WSGI 时代一个服务员一次只能服务一桌客人一个请求从点菜、上菜到结账必须全部完成才能服务下一桌。如果有一桌客人点菜特别慢后面的客人就得干等着。而 ASGI 时代这个服务员变成了“超级服务员”他可以同时服务多桌客人。当 A 桌在慢慢看菜单时他可以立刻去 B 桌点单然后去 C 桌结账。他永远不会闲着整个餐厅的吞吐量自然就上去了。Uvicorn 就是这个“超级服务员”的杰出代表。它底层用了两个“黑科技”uvloop和httptools。uvloop用 Cython 重写了 Python 内置的asyncio事件循环性能可以媲美 Go 语言httptools则是一个超快的 HTTP 解析器。这两者结合让 Uvicorn 在处理成千上万的并发连接时依然能保持极低的资源消耗和极高的响应速度。所以当你使用 FastAPI、Starlette、Quart 这些现代异步框架时Uvicorn 就是那个能让框架性能完全发挥出来的“最佳拍档”。它不仅仅是一个部署工具更是你开发现代高性能 Python Web 应用的基石。2. 从零开始安装与你的第一个 Uvicorn 应用万事开头难但用 Uvicorn 开头真的不难。安装它只需要一行命令我强烈建议你创建一个干净的虚拟环境来操作这样可以避免包依赖冲突的麻烦。pip install uvicorn如果你打算使用 FastAPI那更简单了官方提供了一个“全家桶”安装选项会一次性把 Uvicorn 和其他必要的依赖都装好pip install fastapi[all]装好之后我们来创建一个最简单的应用。这里我以最流行的 FastAPI 为例但请记住Uvicorn 支持任何兼容 ASGI 的应用对象。新建一个文件叫main.py写入以下代码from fastapi import FastAPI app FastAPI() app.get(/) async def read_root(): return {Hello: World} app.get(/items/{item_id}) async def read_item(item_id: int, q: str None): return {item_id: item_id, q: q}代码很简单定义了两个接口。现在让我们用 Uvicorn 把它跑起来。打开终端进入main.py文件所在的目录执行uvicorn main:app --reload让我来拆解一下这个命令main:app这是 Uvicorn 寻找应用对象的语法。main指的是你的 Python 文件main.py不需要写.py后缀app指的是在main.py文件里创建的 FastAPI 实例的名字。如果你的文件叫my_app.py实例叫application那这里就应该是my_app:application。--reload这是开发阶段的神器。加上它之后Uvicorn 会监视你的代码文件.py文件。一旦你保存了修改它会自动重启服务器让你立刻看到变化无需手动停止再启动。这极大地提升了开发效率。命令执行后你应该会看到类似下面的输出INFO: Will watch for changes in these directories: [/your/code/path] INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRLC to quit) INFO: Started reloader process [12345] using WatchFiles INFO: Started server process [12346] INFO: Waiting for application startup. INFO: Application startup complete.现在打开浏览器访问http://127.0.0.1:8000你就会看到{Hello:World}的 JSON 响应。访问http://127.0.0.1:8000/items/5?qtest则会得到{item_id:5,q:test}。恭喜你一个基于 Uvicorn 的异步 Web 服务已经成功运行了整个过程是不是比想象中要简单很多这得益于 Uvicorn 极简的设计哲学它把复杂的事情留给自己把简单的接口留给开发者。3. 开发调试让热重载真正为你所用在开发阶段--reload参数是我们的好朋友但如果你只知道加这个参数可能会踩到一些坑。首先我们来深入了解一下它的工作原理。当你启动uvicorn --reload时实际上启动了两个进程一个是主服务器进程另一个是文件监视器进程Reloader。监视器进程会使用像watchfiles这样的库持续扫描你项目目录下指定类型的文件主要是.py文件。一旦检测到文件内容发生变化比如你按了 CtrlS监视器就会向主服务器进程发送一个信号主进程优雅退出然后监视器进程会重新启动一个新的服务器进程。这个过程非常快通常在一两秒内完成。但是这里有几个关键的注意事项都是我亲身踩过的坑监视范围默认情况下Uvicorn 只监视启动命令所在目录下的文件。如果你的项目结构比较复杂比如有src/,lib/等子目录你需要确保这些目录下的代码变更也能触发重载。一个更稳妥的方式是在启动时明确指定要监视的目录但标准--reload参数本身不支持这个。在实践中只要你的应用对象app所在的模块以及它导入的所有模块都在当前目录或子目录下通常没问题。Docker 开发环境这是最容易出问题的地方。很多人在本地用 Docker Compose 启动开发环境发现代码改了容器里的服务却没重启。根本原因在于热重载监视的是容器内部的文件系统。如果你没有通过-v卷挂载把本地代码目录同步到容器内部那么你在本地 IDE 里改代码容器里的文件根本没变监视器自然没反应。正确的做法是确保你的docker-compose.yml里有类似这样的配置services: web: volumes: - ./app:/app # 将宿主机当前目录下的app文件夹挂载到容器的/app路径这样本地修改才能实时映射到容器内触发热重载。生产环境绝对禁用--reload会带来额外的性能开销文件系统轮询和安全风险理论上攻击者可能通过上传文件来触发重启。在生产环境中务必不要使用这个参数。你的部署流程应该是构建新的 Docker 镜像 - 停止旧容器 - 启动新容器。或者使用 CI/CD 管道来完成。除了热重载开发调试另一个重要部分是日志。在开发时你可能习惯用print()来调试但在 Uvicorn 的异步世界里尤其是在生产模式下print()的输出可能会丢失或者看不到。正确的做法是使用 Python 标准的logging模块并集成 Uvicorn 的日志系统。你可以这样配置你的日志让应用日志和 Uvicorn 的服务器日志风格统一import logging # 获取uvicorn的logger logger logging.getLogger(uvicorn.error) app.get(/debug) async def debug_endpoint(): logger.info(这是一个INFO级别的日志在控制台可以看到。) logger.debug(这是一个DEBUG日志默认看不到需要调整log level。) # 做一些复杂的逻辑... return {status: debugged}启动时通过--log-level参数来控制日志的详细程度uvicorn main:app --reload --log-level debug这样logger.debug的信息也会输出到控制台非常便于追踪复杂的异步调用链。把日志用好是提升开发调试效率的关键一步。4. 性能调优关键参数与配置解析当你的应用从开发环境走向测试甚至准备上生产时性能就成了首要考虑因素。Uvicorn 提供了一系列启动参数和配置选项让你可以精细地控制服务器的行为。我们来逐一解析那些最重要的“性能旋钮”。首先是--workers参数。这是最容易被误解的参数之一。Uvicorn 本身是一个单进程的异步服务器。--workers N参数会让 Uvicorn 启动多个工作进程Worker Processes每个进程都是一个独立的 Uvicorn 服务器实例运行着你的整个应用副本。这有什么用呢是为了利用多核 CPU。因为 Python 有 GIL全局解释器锁单个 Python 进程无法真正并行执行多个线程的 CPU 密集型任务。通过启动多个 Worker 进程操作系统可以将它们调度到不同的 CPU 核心上从而实现真正的并行处理。那么Worker 数量设为多少合适一个经典的公式是CPU 核心数 * 2 1。比如你的服务器有 4 个物理核心可以设置为4 * 2 1 9。但这不是金科玉律。如果你的应用是I/O 密集型的大部分时间在等待网络、数据库那么单个 Worker 就能处理大量并发增加 Worker 主要是为了利用多核和增加稳定性。如果是CPU 密集型的比如复杂的图像处理、数学计算增加 Worker 对提升吞吐量更有帮助。我的建议是从CPU 核心数开始进行压力测试观察 CPU 利用率和响应时间找到最适合你应用的数值。其次是连接和超时相关参数。这些参数对于应对高并发流量、防止资源耗尽至关重要。--limit-concurrency: 限制服务器处理的并发连接总数。这是一个安全阀防止突发流量把你的服务器内存打爆。你可以根据应用的内存占用和服务器总内存来估算一个安全值。--backlog: 监听套接字的积压连接数。当新连接到达的速度超过服务器接受的速度时连接会进入一个队列等待。这个参数设置队列的长度。默认值2048对于大多数场景已经足够但在超高并发场景下可能需要调大。--timeout-keep-alive: 保持连接Keep-Alive的超时时间。客户端完成一个请求后连接会保持打开一段时间以便发送下一个请求避免重复握手。设置太短会降低性能太长会占用服务器连接资源。默认的 5 秒是一个比较平衡的值。下面是一个综合了性能调优参数的启动命令示例uvicorn main:app \ --host 0.0.0.0 \ --port 8080 \ --workers 4 \ --limit-concurrency 1000 \ --timeout-keep-alive 5 \ --log-level info除了命令行参数你还可以通过配置文件或代码来配置 Uvicorn这对于管理复杂的生产配置更清晰。你可以创建一个uvicorn_config.py文件# uvicorn_config.py import multiprocessing # 自动计算CPU核心数 workers multiprocessing.cpu_count() * 2 # 或者手动指定 # workers 4 config { app: main:app, host: 0.0.0.0, port: 8080, workers: workers, log_level: info, limit_concurrency: 1000, timeout_keep_alive: 5, # 启用HTTP/1.1的流水线支持Pipelining在某些场景下能提升性能 proxy_headers: True, forwarded_allow_ips: *, # 仅在可信代理后方使用此设置 }然后通过--config参数来启动uvicorn --config uvicorn_config.py这种方式让配置与代码分离更易于管理和版本控制。记住性能调优没有银弹最好的方式是基于真实的监控数据如CPU、内存、请求延迟、错误率进行持续的测试和调整。5. 日志与监控打造可观测的生产服务一个在开发环境跑得飞快的应用上了生产可能就会遇到各种稀奇古怪的问题。如果没有清晰的日志和有效的监控排查问题就像大海捞针。因此在生产环境中配置好 Uvicorn 的日志和集成监控系统是保证服务稳定性的生命线。首先我们来深入配置日志。之前我们简单使用了logging.getLogger(“uvicorn”)但在生产环境我们需要更结构化的输出通常是将日志写入文件并可能发送到像 ELKElasticsearch, Logstash, Kibana或 Loki 这样的集中式日志系统。我们可以通过 Python 的logging.config.dictConfig进行详细配置。创建一个logging_config.py文件# logging_config.py import logging.config log_config { version: 1, disable_existing_loggers: False, formatters: { default: { (): uvicorn.logging.DefaultFormatter, fmt: %(asctime)s - %(name)s - %(levelname)s - %(message)s, datefmt: %Y-%m-%d %H:%M:%S, }, access: { (): uvicorn.logging.AccessFormatter, fmt: %(asctime)s - %(client_addr)s - %(request_line)s %(status_code)s, datefmt: %Y-%m-%d %H:%M:%S, }, }, handlers: { default: { formatter: default, class: logging.handlers.RotatingFileHandler, filename: /var/log/myapp/uvicorn.log, maxBytes: 10485760, # 10MB backupCount: 5, }, access: { formatter: access, class: logging.handlers.RotatingFileHandler, filename: /var/log/myapp/uvicorn_access.log, maxBytes: 10485760, backupCount: 5, }, console: { class: logging.StreamHandler, formatter: default, stream: ext://sys.stdout, }, }, loggers: { uvicorn: {handlers: [default, console], level: INFO, propagate: False}, uvicorn.error: {level: INFO}, uvicorn.access: {handlers: [access], level: INFO, propagate: False}, }, } # 应用配置 logging.config.dictConfig(log_config)这个配置做了几件事定义了两种格式default用于一般日志access专门用于访问日志包含客户端IP、请求行、状态码。配置了RotatingFileHandler日志文件达到10MB后会轮转最多保留5个备份文件防止日志把磁盘撑满。将uvicorn服务器日志同时输出到文件和控制台将uvicorn.access访问日志只输出到单独的文件。在main.py中导入这个配置import logging_configUvicorn 启动时会自动识别并应用它。其次是集成应用性能监控APM。日志告诉我们“发生了什么”而监控告诉我们“系统健康状况如何”。对于 Python 异步应用像Prometheus这样的监控系统是绝配。你可以使用prometheus-client库在应用中暴露指标。安装并集成 Prometheus 客户端pip install prometheus-client在你的 FastAPI 应用中添加一个/metrics端点from prometheus_client import make_asgi_app, Counter, Histogram import time # 创建指标 REQUEST_COUNT Counter(http_requests_total, Total HTTP Requests, [method, endpoint, status]) REQUEST_LATENCY Histogram(http_request_duration_seconds, HTTP request latency in seconds, [method, endpoint]) # 创建 Prometheus ASGI 应用 metrics_app make_asgi_app() # 挂载到你的主应用假设你使用 FastAPI from fastapi import FastAPI, Request app FastAPI() # 添加一个中间件来收集指标 app.middleware(http) async def monitor_requests(request: Request, call_next): method request.method endpoint request.url.path start_time time.time() response await call_next(request) process_time time.time() - start_time REQUEST_COUNT.labels(methodmethod, endpointendpoint, statusresponse.status_code).inc() REQUEST_LATENCY.labels(methodmethod, endpointendpoint).observe(process_time) return response # 挂载 metrics 端点 app.mount(/metrics, metrics_app)现在访问你的服务/metrics路径就能看到 Prometheus 格式的指标数据。再配合 Grafana 进行可视化你就能实时看到请求量、延迟分布、错误率等关键图表真正做到对服务状态了如指掌。这套日志加监控的组合拳是你在生产环境安心睡觉的保障。6. 生产部署实战Gunicorn Uvicorn 的黄金组合虽然 Uvicorn 可以直接用于生产uvicorn main:app --host 0.0.0.0 --port 80 --workers 4但在最严肃的生产环境中更常见的做法是使用Gunicorn 作为进程管理器Uvicorn 作为其内部的 Worker。这个组合结合了 Gunicorn 成熟稳定的进程管理、信号处理、优雅重启等特性和 Uvicorn 高性能的异步处理能力。为什么需要 GunicornUvicorn 本身是一个优秀的 ASGI 服务器但 Gunicorn 在以下方面提供了额外价值更稳健的进程管理Gunicorn 的主进程Master不处理请求只管理 Worker 进程。如果某个 Worker 进程崩溃Master 会立即重启一个新的保证服务整体可用性。优雅重启Graceful Reload当你需要更新代码时可以向 Gunicorn 主进程发送 HUP 信号。它会先启动新的 Worker 进程加载新代码等新进程准备就绪后再逐步关闭旧的 Worker实现零停机部署。更丰富的配置和扩展Gunicorn 有大量经过时间检验的配置选项比如 Worker 类、超时设置、用户/组切换等。如何部署这个组合首先确保安装了 Gunicorn 和 Uvicornpip install gunicorn uvicorn然后使用 Gunicorn 命令启动并通过-k参数指定使用 Uvicorn 的 Worker 类gunicorn main:app \ -w 4 \ -k uvicorn.workers.UvicornWorker \ -b 0.0.0.0:8080 \ --timeout 120 \ --access-logfile - \ --error-logfile - \ --worker-tmp-dir /dev/shm让我解释一下这些参数-w 4启动 4 个 Worker 进程。和直接使用 Uvicorn 的--workers类似。-k uvicorn.workers.UvicornWorker这是关键告诉 Gunicorn 使用 Uvicorn 的 Worker 来运行 ASGI 应用。-b 0.0.0.0:8080绑定地址和端口。--timeout 120Worker 进程处理一个请求的超时时间秒。对于长时间运行的异步任务这个值需要设得大一些。--access-logfile -和--error-logfile -将访问日志和错误日志输出到标准输出stdout。这在容器化部署中非常有用因为 Docker 或 Kubernetes 可以捕获 stdout 的日志。--worker-tmp-dir /dev/shm将 Worker 的临时文件目录指向内存文件系统如果可用可以提升一些 I/O 性能。在 Docker 容器中部署这是目前最主流的方式。你的Dockerfile可能看起来像这样FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . # 通常不直接在 Dockerfile 中运行而是通过 CMD 指定命令 CMD [gunicorn, main:app, -k, uvicorn.workers.UvicornWorker, -w, 4, -b, 0.0.0.0:8080, --timeout, 120]然后使用docker run或docker-compose up来启动容器。在 Kubernetes 中你只需将这个 Docker 镜像作为 Pod 中的容器来运行即可。最后别忘了前置反向代理。无论是直接使用 Uvicorn 还是 Gunicorn Uvicorn都不应该直接暴露在公网上。前面一定要有一层像Nginx或Caddy这样的反向代理。反向代理可以处理 SSL 终止、静态文件服务、负载均衡、缓冲、限流等任务让你的应用服务器更专注于业务逻辑。一个简单的 Nginx 配置示例如下server { listen 80; server_name yourdomain.com; location / { # 将请求转发给运行在 8080 端口的 Gunicorn/Uvicorn proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 可选直接由Nginx处理静态文件效率更高 location /static { alias /path/to/your/static/files; expires 30d; } }记得在 Uvicorn/Gunicorn 启动命令中加上--proxy-headers参数这样应用才能正确识别从 Nginx 传递过来的真实客户端 IPX-Real-IP等头部。这套从容器到进程管理器再到反向代理的完整部署方案构成了一个健壮、可扩展、高性能的生产环境基础架构。

相关新闻

DARTS vs 传统NAS:可微分搜索为什么快100倍?

DARTS vs 传统NAS:可微分搜索为什么快100倍?

DARTS vs 传统NAS:可微分搜索为什么快100倍? 如果你曾经尝试过用强化学习或者进化算法来搜索一个神经网络架构,那种感觉大概就像在伸手不见五指的黑屋子里找钥匙——你知道钥匙就在某个角落,但只能靠一遍遍地摸索、碰撞&#xff0…

2026/7/5 5:29:06 阅读更多 →
树莓派实战:用XDP+eBPF打造高性能二层交换机(附完整代码)

树莓派实战:用XDP+eBPF打造高性能二层交换机(附完整代码)

树莓派Zero W变身:用XDP与eBPF手搓一个高性能家庭网络交换核心 最近在折腾家庭网络,想把书房里那堆设备——NAS、台式机、游戏机还有智能家居中枢——用更高效的方式连接起来。市面上的千兆交换机选择不少,但总感觉少了点乐趣,而且…

2026/7/4 10:45:43 阅读更多 →
如何用CS5802芯片DIY一个4K60Hz的HDMI转Type-C转接器(附完整电路图)

如何用CS5802芯片DIY一个4K60Hz的HDMI转Type-C转接器(附完整电路图)

从零打造4K60Hz高清桥梁:基于CS5802的HDMI转Type-C转接器实战指南 你是否曾面对显示器上那个孤零零的Type-C接口,而手头只有传统的HDMI线缆感到束手无策?或者,作为一名硬件爱好者,看着市面上琳琅满目的转接器&#xff…

2026/7/4 4:41:21 阅读更多 →

最新新闻

5个核心功能全面解析:LSLib工具包助你轻松处理神界原罪与博德之门3游戏文件

5个核心功能全面解析:LSLib工具包助你轻松处理神界原罪与博德之门3游戏文件

5个核心功能全面解析:LSLib工具包助你轻松处理神界原罪与博德之门3游戏文件 【免费下载链接】lslib Tools for manipulating Divinity Original Sin and Baldurs Gate 3 files 项目地址: https://gitcode.com/gh_mirrors/ls/lslib LSLib是一个强大的开源工具…

2026/7/5 5:27:40 阅读更多 →
终极Koodo Reader故障排除指南:15个常见问题快速解决方案

终极Koodo Reader故障排除指南:15个常见问题快速解决方案

终极Koodo Reader故障排除指南:15个常见问题快速解决方案 【免费下载链接】koodo-reader A modern ebook manager and reader with sync and backup capacities for Windows, macOS, Linux, Android, iOS and Web 项目地址: https://gitcode.com/GitHub_Trending/…

2026/7/5 5:25:40 阅读更多 →
3步搭建个人哔咔漫画离线图书馆:告别网络卡顿,下载速度提升300%

3步搭建个人哔咔漫画离线图书馆:告别网络卡顿,下载速度提升300%

3步搭建个人哔咔漫画离线图书馆:告别网络卡顿,下载速度提升300% 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: htt…

2026/7/5 5:21:40 阅读更多 →
MySQL数据视图学习笔记

MySQL数据视图学习笔记

1. 什么是视图?视图是数据库的虚拟表,不存储真实数据,仅保存一条预编译的SELECT查询语句。每次查询视图时,数据库会动态执行这条SQL,从关联的底层数据表中实时计算并返回结果。视图相当于给底层数据表开了一扇“观景窗…

2026/7/5 5:19:36 阅读更多 →
DDrawCompat完整指南:如何让经典Windows游戏在现代系统上流畅运行

DDrawCompat完整指南:如何让经典Windows游戏在现代系统上流畅运行

DDrawCompat完整指南:如何让经典Windows游戏在现代系统上流畅运行 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirror…

2026/7/5 5:19:36 阅读更多 →
MyBatis是什么?MyBatis-Plus是什么?

MyBatis是什么?MyBatis-Plus是什么?

MyBatis是什么?一款 持久层 框架持久层是什么?软件分层架构中,负责实现数据持久化、专门与数据库交互的层级框架是什么?一套封装了底层通用逻辑、提供统一开发规范的半成品程序(开发人员在这套半成品程序上继续开发自己…

2026/7/5 5:17:36 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻