跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Web 服务与 I/O 模型:原理与 Nginx 实战

介绍 Web 服务核心机制,对比 Apache prefork/worker/event 模型与 Nginx 特性。详细解析五种网络 I/O 模型(阻塞、非阻塞、信号驱动、异步、多路复用)及零拷贝技术。最后提供 Nginx 源码编译安装、平滑升级回滚及配置优化实战步骤,涵盖进程管理、事件模块调优及系统句柄限制处理。

剑仙发布于 2026/4/6更新于 2026/5/2126 浏览

一、Web 服务介绍

1.1 Apache 模型

1.1.1 Apache prefork 模型(预派生模式)
  • 核心机制:主控制进程派生多个独立子进程,使用 select 模型,最大并发 1024;每个子进程单线程响应用户请求
  • 资源特性:占用内存较多,但稳定性极高
  • 配置特点:可设置进程数的最大值和最小值
  • 适用场景:访问量中等的场景
  • 优缺点
    • ✅ 优点:极致稳定,故障隔离性好
    • ❌ 缺点:每个请求对应一个进程,资源占用高,并发能力弱,不适合高并发场景
1.1.2 Apache worker 模型(多进程 + 多线程混合模式)
  • 核心机制:主进程启动多个子进程,每个子进程包含固定线程数;线程处理请求,线程不足时新建子进程补充
  • 资源特性:相比 prefork 内存占用更少,支持更高并发
  • 优缺点
    • ✅ 优点:内存占用低,可处理更多请求
    • ❌ 缺点:长连接(keepalive)会长期占用线程,高并发下易出现无可用线程的情况(prefork 也存在此问题)
1.1.3 Apache event 模型(事件驱动模型)
  • 核心机制:2012 年 Apache 2.4.X 正式支持,基于 epoll 事件驱动;每个进程响应多个请求,专门线程管理 keepalive 连接
  • 核心优化:解决 keepalive 连接空占线程的问题,有真实请求时才分配服务线程,执行完立即释放
  • 优缺点
    • ✅ 优点:单线程响应多请求,内存占用少,高并发表现优秀
    • ❌ 缺点:无线程安全控制

1.2 Nginx - 高性能的 Web 服务端

1.2.1 Nginx 简介
  • 开发者:伊戈尔・赛索耶夫(俄罗斯),为 Rambler.ru 搜索引擎开发
  • 开发历程:2002 年启动开发,2004 年 10 月发布 0.1.0 版本;2019 年被 F5 以 6.7 亿美元收购
  • 核心代码:核心模块代码约 19.8 万行,按收购价折算约 2.2 万人民币 / 行
  • 官方地址:https://nginx.org
  • 版本类型:开发版、稳定版、过期版
  • 应用场景:天猫、淘宝、京东、小米、网易、新浪等一线互联网公司均使用或二次开发
1.2.2 Nginx 核心特性
  • 支持 HTTP 服务器、反向代理、邮件服务器
  • 快速响应静态网页请求
  • 支持 FastCGI/SSL/Virtual Host/URL Rewrite/Gzip/HTTP Basic Auth
  • 1.9 版本以上开启 stream 模块可支持 TCP/UDP 负载均衡
  • 支持第三方功能扩展

二、服务端 I/O 流程

2.1 基本概念

  • I/O:Input/Output(输入 / 输出)
  • IOPS:每秒输入输出量,衡量磁盘性能的核心指标,指单位时间内系统处理的 I/O 请求数(读 / 写)
  • 完整 I/O 过程:用户空间进程与内核空间数据的交换,需将内核内存数据拷贝到用户进程内存(内核与用户空间严格隔离,无法直接访问)

2.2 服务器 I/O 类型

2.2.1 磁盘 I/O
  • 进程向内核发起系统调用,请求磁盘资源(如 HTML、图片)
  • 内核通过驱动将文件加载到内核内存空间,再拷贝到进程内存
  • 大文件加载需等待较长时间
2.2.2 网络 I/O
  • 本质:对 socket 文件的读写(一切皆文件)
  • 核心:网络协议栈与用户空间进程的数据交换

2.3 I/O 通用流程(磁盘 / 网络均适用)

  1. 数据准备阶段:将数据从文件加载到内核内存缓冲区,耗时较长
  2. 数据拷贝阶段:将数据从内核缓冲区拷贝到用户进程内存,耗时较短

三、I/O 模型核心概念

3.1 同步 / 异步(消息通信机制)

  • 同步(synchronous):被调用者不主动通知处理结果,需调用者主动查询
  • 异步(asynchronous):被调用者通过状态、通知或回调主动告知调用者运行状态

3.2 阻塞 / 非阻塞(等待结果时的状态)

  • 阻塞(blocking):IO 操作完全完成后才返回用户空间,调用者挂起,无法执行其他操作
  • 非阻塞(nonblocking):IO 操作调用后立即返回状态值,无需等待完成,调用者不挂起,可执行其他操作

四、网络 I/O 模型

4.1 阻塞型 I/O 模型(blocking IO)

  • 核心流程
    1. 用户线程通过 read 系统调用发起 I/O 读操作,从用户态切换到内核态
    2. 内核等待数据包到达后,将数据拷贝到用户空间
    3. 用户线程需等待 read 完成后才能处理数据
  • 核心特征:用户线程全程阻塞,CPU 利用率低
  • 优缺点
    • ✅ 优点:程序简单,阻塞期间进程 / 线程挂起,基本不占用 CPU
    • ❌ 缺点:每个连接需独立进程 / 线程,高并发时内存、线程切换开销大
  • 应用场景:Apache prefork 模式

4.2 非阻塞型 I/O 模型(nonblocking IO)

  • 核心流程
    1. 用户线程发起 IO 请求后立即返回(无数据)
    2. 用户线程需不断轮询发起 IO 请求,直到数据到达后读取
  • 核心问题
    • 大量文件描述符需逐个轮询,上下文切换频繁
    • 轮询时间难把控(过长响应慢,过短耗 CPU)
  • 优缺点
    • ✅ 优点:调用者不阻塞,可执行其他操作
    • ❌ 缺点:轮询耗 CPU,实际极少单独使用
  • 核心机制:无数据时内核返回 EWOULDBLOCK 错误,数据就绪后拷贝到进程缓冲区

4.3 信号驱动式 I/O 模型(signal-driven IO)

  • 核心流程
    1. 通过 sigaction 系统调用注册信号处理回调函数,调用立即返回,主程序继续执行
    2. 内核数据就绪时发送 SIGIO 信号,触发回调函数
    3. 回调函数中调用 recvfrom 将数据从内核拷贝到用户空间
  • 优缺点
    • ✅ 优点:等待数据时进程不阻塞,资源利用率高
    • ❌ 缺点:大量 IO 操作时可能因信号队列溢出导致通知失效

4.4 异步 I/O 模型(asynchronous IO)

  • 核心区别:信号驱动是通知'开始 IO',异步 IO 是通知'IO 完成'
  • 核心流程
    1. 用户进程调用 aio_read 后立即返回,可执行其他操作
    2. 内核完成数据准备 + 拷贝后,主动通知用户进程
  • 核心特征:IO 两个阶段(准备 + 拷贝)进程均非阻塞
  • 优缺点
    • ✅ 优点:充分利用 DMA 特性,IO 与计算重叠
    • ❌ 缺点:操作系统实现复杂;Linux 2.6 才引入,AIO 不完善(常用 libevent/libev/libuv 等开源库)
  • 应用场景:异步非阻塞是最常用的通信方式(进程和内核均不阻塞,相互不影响)

4.5 多路复用 I/O 模型(I/O multiplexing)

4.5.1 核心原理
  • 单个线程监控 / 处理多个文件描述符的 IO(复用线程)
  • 通过内核的 select/poll/epoll 系统调用实现
  • 内核轮询监控所有注册的 socket,数据就绪时通知用户进程
4.5.2 核心流程
  1. 用户将 IO 操作注册到 select,等待其返回
  2. 数据就绪后 select 返回,用户线程调用 read 读取数据
  3. 阻塞发生在 select 调用上,而非实际 IO 操作
4.5.3 关键说明
  • Apache prefork 用 select,worker 用 poll
  • NIO(非阻塞 IO)需与 IO 多路复用配合才有实际意义(仅用多路复用 + BIO 仍会阻塞)
  • 虽阻塞在 select,但可同时监控多个 IO,相比单线程单 IO 更高效
4.5.4 优缺点
  • ✅ 优点:基于一个阻塞对象监控多个描述符,节省系统资源
  • ❌ 缺点:连接数少时效率低于'多线程 + 阻塞 IO',单个连接需 2 次系统调用
4.5.5 适用场景
  • 客户端处理多个描述符(交互式输入 + 网络套接字)
  • 客户端同时处理多个套接字
  • 服务器同时处理监听套接字 + 已连接套接字
  • 服务器同时处理 TCP+UDP
  • 服务器处理多服务 / 多协议

4.6 五种 I/O 模型对比

模型类型阻塞特性同步 / 异步核心特点
阻塞 IO全程阻塞同步简单但并发差
非阻塞 IO非阻塞(轮询)同步耗 CPU,极少单独使用
信号驱动 IO等待非阻塞同步信号队列易溢出
异步 IO全程非阻塞异步性能最优,实现复杂
多路复用 IO阻塞在 select同步高并发主流方案,异步阻塞

注:前四种均为同步 IO(recvfrom 会阻塞),仅异步 IO 符合 POSIX 异步定义

五、零拷贝

5.1 传统 Linux I/O 问题

  • 标准 IO 接口(read/write)基于数据拷贝,频繁的用户态 / 内核态切换 + 数据拷贝消耗大量 CPU
  • 数据拷贝时间占数据包处理总时间的 57.1%

5.2 零拷贝核心思想

  • 并非真正'0 拷贝',而是通过优化减少拷贝操作,降低 CPU 压力
  • 核心技术:MMAP(内存映射)、SENDMSG/SENDFILE

5.3 MMAP(Memory Mapping)

  • 原理:将文件磁盘地址与进程虚拟地址空间映射,进程可直接操作内存(无需 read/write)
  • 优势:减少内核态→用户态的一次拷贝(传统 read 需拷贝,MMAP 直接访问页缓存)
  • 适用场景:大量数据传输

六、Nginx 实战操作

6.1 Nginx 源码编译安装

6.1.1 下载解压
# 下载软件包
[root@Nginx ~]# wget https://nginx.org/download/nginx-1.28.1.tar.gz
# 解压
[root@Nginx ~]# tar zxf nginx-1.28.1.tar.gz
[root@Nginx ~]# cd nginx-1.28.1/
[root@Nginx nginx-1.28.1]# ls
# 验证解压结果
auto     CHANGES.ru         conf       contrib        html       man        SECURITY.md
CHANGES  CODE_OF_CONDUCT.md configure    CONTRIBUTING.md LICENSE      README.md  src
6.1.2 环境准备与配置
# 安装依赖
[root@Nginx ~]# dnf install gcc openssl-devel.x86_64 pcre2-devel.x86_64 zlib-devel -y
# 配置编译参数
[root@Nginx nginx-1.28.1]# ./configure \
  --prefix=/usr/local/nginx \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_v2_module \
  --with-http_realip_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --with-pcre \
  --with-stream \
  --with-stream_ssl_module \
  --with-stream_realip_module
6.1.3 编译安装
# 编译
[root@Nginx nginx-1.28.1]# make
# 安装
[root@Nginx nginx-1.28.1]# make install
6.1.4 启动配置
# 设置环境变量
[root@Nginx sbin]# vim ~/.bash_profile
export PATH=$PATH:/usr/local/nginx/sbin # 添加此行
[root@Nginx sbin]# source ~/.bash_profile # 生效
# 创建 nginx 用户
[root@Nginx logs]# useradd -s /sbin/nologin -M nginx
# 启动 nginx
[root@Nginx logs]# nginx
# 验证启动
[root@Nginx logs]# ps aux | grep nginx
root       44012  0.0  0.1  14688  2356 ?       Ss   17:01   0:00 nginx: master process nginx
nginx      44013  0.0  0.2  14888  3892 ?       S    17:01   0:00 nginx: worker process
# 测试访问
[root@Nginx logs]# echo timinglee > /usr/local/nginx/html/index.html
[root@Nginx logs]# curl 172.25.254.100 # 预期输出:timinglee
6.1.5 编写 systemd 启动文件
[root@Nginx ~]# vim /lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# 重载配置
[root@Nginx ~]# systemctl daemon-reload
# 设置开机自启并启动
[root@Nginx ~]# systemctl enable --now nginx
# 验证状态
[root@Nginx ~]# systemctl status nginx.service

6.2 Nginx 平滑升级及回滚

6.2.1 下载高版本并编译
# 下载高版本
[root@Nginx ~]# wget https://nginx.org/download/nginx-1.29.4.tar.gz
# 解压并修改版本信息(隐藏版本)
[root@Nginx ~]# tar zxf nginx-1.29.4.tar.gz
[root@Nginx ~]# cd nginx-1.29.4/src/core/
[root@Nginx core]# vim nginx.h
#define nginx_version     1029004
#define NGINX_VERSION     ""
#define NGINX_VER         "TIMINGLEE/" NGINX_VERSION
# 编译(参数与旧版本一致)
[root@Nginx core]# cd ../../
[root@Nginx nginx-1.29.4]# ./configure \
  --prefix=/usr/local/nginx \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_v2_module \
  --with-http_realip_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --with-pcre \
  --with-stream \
  --with-stream_ssl_module \
  --with-stream_realip_module
[root@Nginx nginx-1.29.4]# make # 仅编译,不安装
6.2.2 平滑升级
# 替换二进制文件
[root@Nginx nginx-1.29.4]# cd objs/
[root@Nginx objs]# cp -f nginx /usr/local/nginx/sbin/nginx
# 查看旧 master 进程 ID
[root@Nginx sbin]# ps aux | grep nginx
root       1643  0.0  0.1  14688  2360 ?       Ss   09:55   0:00 nginx: master process /usr/local/nginx/sbin/nginx
# 发送 USR2 信号启动新 master 进程
[root@Nginx sbin]# kill -USR2 1643
# 验证双 master 进程
[root@Nginx sbin]# ps aux | grep nginx
root       1643  0.0  0.1  14688  2744 ?       Ss   09:55   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      1644  0.0  0.2  14888  3896 ?       S    09:55   0:00 nginx: worker process
root       4919  0.0  0.4  14716  7936 ?       S    10:24   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      4921  0.0  0.2  14916  4156 ?       S    10:24   0:24   0:00 nginx: worker process
# 验证版本
[root@Nginx sbin]# nginx -V
nginx version: TIMINGLEE/ # 已升级为新版本
# 回收旧版本 worker 进程
[root@Nginx sbin]# kill -WINCH 1643
6.2.3 版本回滚
# 备份新版本二进制文件
[root@Nginx sbin]# cp nginx nginx.new -p
# 恢复旧版本二进制文件(需提前备份)
[root@Nginx sbin]# cp nginx.old nginx -pf
# 发送 HUP 信号重启旧 master 进程
[root@Nginx sbin]# kill -HUP 1643
# 验证回滚结果
[root@Nginx sbin]# nginx -V
nginx version: nginx/1.28.1 # 回滚至旧版本
# 回收新版本 master 进程
[root@Nginx sbin]# kill -WINCH 4919

6.3 Nginx 配置优化

6.3.1 基础用户配置
[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
user nginx; # 指定运行用户
# 验证配置并重载
[root@Nginx ~]# nginx -t
[root@Nginx ~]# nginx -s reload
6.3.2 工作进程优化
# 手动设置进程数
[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; # 设置 2 个工作进程
[root@Nginx ~]# nginx -s reload
# 自动适配 CPU(推荐)
[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
worker_processes auto; # 自动匹配 CPU 核心数
worker_cpu_affinity 0001 0010 0100 1000; # 进程绑定 CPU 核心(4 核心示例)
# 验证绑定结果
[root@Nginx ~]# ps axo pid,cmd,psr | grep nginx
  887 nginx: master process /usr/   3
 1635 nginx: worker process          0
 1636 nginx: worker process          1
 1637 nginx: worker process          2
 1638 nginx: worker process          3
6.3.3 事件模块优化
[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
events {
  worker_connections 10000; # 单个进程最大连接数
  use epoll; # 使用 epoll 事件模型
  accept_mutex on; # 防止惊群效应
  multi_accept on; # 一次性接受所有新连接
}
[root@Nginx ~]# nginx -s reload
6.3.4 系统文件句柄限制(解决高并发报错)
# 报错场景:ab 测试时提示 "socket: Too many open files (24)"
[root@Nginx ~]# ab -n 100000 -c5000 http://172.25.254.100/index.html
# 修改系统限制
[root@Nginx ~]# vim /etc/security/limits.conf
*           -      nofile          100000 # 所有用户最大文件句柄数
*           -      noproc          100000 # 所有用户最大进程数
root        -      nofile          100000 # root 用户单独设置
# 验证生效
[root@Nginx ~]# sudo -u nginx ulimit -n 100000
# 重新测试高并发
[root@Nginx ~]# ab -n 100000 -c10000 http://172.25.254.100/index.html

总结

  1. Web 服务核心:Apache 稳定但并发弱(prefork/worker/event 三种模型),Nginx 高性能高并发,是互联网场景首选。
  2. I/O 模型关键:同步 / 异步关注'通知机制',阻塞 / 非阻塞关注'等待状态';多路复用(epoll)是高并发主流方案,异步 IO 性能最优但实现复杂。
  3. Nginx 实战重点:源码编译需匹配依赖,平滑升级通过信号(USR2/WINCH)实现无停机更新,配置优化核心是进程数、CPU 绑定、连接数和文件句柄限制。

目录

  1. 一、Web 服务介绍
  2. 1.1 Apache 模型
  3. 1.1.1 Apache prefork 模型(预派生模式)
  4. 1.1.2 Apache worker 模型(多进程 + 多线程混合模式)
  5. 1.1.3 Apache event 模型(事件驱动模型)
  6. 1.2 Nginx - 高性能的 Web 服务端
  7. 1.2.1 Nginx 简介
  8. 1.2.2 Nginx 核心特性
  9. 二、服务端 I/O 流程
  10. 2.1 基本概念
  11. 2.2 服务器 I/O 类型
  12. 2.2.1 磁盘 I/O
  13. 2.2.2 网络 I/O
  14. 2.3 I/O 通用流程(磁盘 / 网络均适用)
  15. 三、I/O 模型核心概念
  16. 3.1 同步 / 异步(消息通信机制)
  17. 3.2 阻塞 / 非阻塞(等待结果时的状态)
  18. 四、网络 I/O 模型
  19. 4.1 阻塞型 I/O 模型(blocking IO)
  20. 4.2 非阻塞型 I/O 模型(nonblocking IO)
  21. 4.3 信号驱动式 I/O 模型(signal-driven IO)
  22. 4.4 异步 I/O 模型(asynchronous IO)
  23. 4.5 多路复用 I/O 模型(I/O multiplexing)
  24. 4.5.1 核心原理
  25. 4.5.2 核心流程
  26. 4.5.3 关键说明
  27. 4.5.4 优缺点
  28. 4.5.5 适用场景
  29. 4.6 五种 I/O 模型对比
  30. 五、零拷贝
  31. 5.1 传统 Linux I/O 问题
  32. 5.2 零拷贝核心思想
  33. 5.3 MMAP(Memory Mapping)
  34. 六、Nginx 实战操作
  35. 6.1 Nginx 源码编译安装
  36. 6.1.1 下载解压
  37. 下载软件包
  38. 解压
  39. 验证解压结果
  40. 6.1.2 环境准备与配置
  41. 安装依赖
  42. 配置编译参数
  43. 6.1.3 编译安装
  44. 编译
  45. 安装
  46. 6.1.4 启动配置
  47. 设置环境变量
  48. 创建 nginx 用户
  49. 启动 nginx
  50. 验证启动
  51. 测试访问
  52. 6.1.5 编写 systemd 启动文件
  53. 重载配置
  54. 设置开机自启并启动
  55. 验证状态
  56. 6.2 Nginx 平滑升级及回滚
  57. 6.2.1 下载高版本并编译
  58. 下载高版本
  59. 解压并修改版本信息(隐藏版本)
  60. 编译(参数与旧版本一致)
  61. 6.2.2 平滑升级
  62. 替换二进制文件
  63. 查看旧 master 进程 ID
  64. 发送 USR2 信号启动新 master 进程
  65. 验证双 master 进程
  66. 验证版本
  67. 回收旧版本 worker 进程
  68. 6.2.3 版本回滚
  69. 备份新版本二进制文件
  70. 恢复旧版本二进制文件(需提前备份)
  71. 发送 HUP 信号重启旧 master 进程
  72. 验证回滚结果
  73. 回收新版本 master 进程
  74. 6.3 Nginx 配置优化
  75. 6.3.1 基础用户配置
  76. 验证配置并重载
  77. 6.3.2 工作进程优化
  78. 手动设置进程数
  79. 自动适配 CPU(推荐)
  80. 验证绑定结果
  81. 6.3.3 事件模块优化
  82. 6.3.4 系统文件句柄限制(解决高并发报错)
  83. 报错场景:ab 测试时提示 "socket: Too many open files (24)"
  84. 修改系统限制
  85. 验证生效
  86. 重新测试高并发
  87. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 云开发 Copilot:AI 重塑开发流程的实践指南
  • AIGC 插画创作技术解析与代码实战
  • 宜搭低代码高级认证实操:待办列表功能实现
  • 自然语言处理在法律领域的应用与实战
  • RoboChallenge 具身智能年度报告:4 万次真机评测揭示模型真实能力
  • OpenClaw 架构原理与核心机制深度解析
  • Python 性能分析实战:从 cProfile 到火焰图,精准定位瓶颈
  • Qwen3 模型 LoRA 微调实战(基于 LLaMA-Factory)
  • 系统学习 AIGC:构建从入门到实战的完整技能体系
  • 从零开始用 Python 复现 LLaMA 4 MoE 架构
  • OpenClaw 本地 AI 助手安装与配置实战指南
  • Windows 系统安装配置 Neo4j 图数据库图文教程
  • DeepSeek-R1 使用技巧:如何平衡深度思考与回复质量
  • 基于Python的轻量级上位机开发流程解析
  • 无人机 5.8G 模拟图传电路设计方案及性能分析
  • Windows 权限提升:滥用 Windows 服务提权(上)
  • Windows 安装 Python 后 CMD 命令行无法识别
  • 机器人视觉感知系统:YOLOv8 与 ROS 集成应用指南
  • Linux 基础 IO 解析:从 C 库函数到系统调用,理解文件操作本质
  • 如何修改 Conda 环境的 Python 版本

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online