根级字段(2)
字段 类型 / 默认 约束与说明
engine.workersuint · 0 0–1024;0 = xrt 默认。热重载不可变 ,变更被拒绝
services数组 · 必填 缺失或非数组:field 'services' expect array 启动失败
服务级字段(services[i],13)
字段 类型 / 默认 约束与说明
enabledbool · true 服务开关
classstring · 必填 白名单 http / ws / tcp / udp / custom / app,其余 fail-fast(app = http 节点前端化,见 app 节点 )
namestring · 必填 全局唯一(重复报 duplicate name);xsServerFind 的键
ipstring · 0.0.0.0 监听地址;app 类默认 127.0.0.1 (回环绑定不触发 Windows 防火墙弹窗)
portuint · — 1–65535;非 custom 必填(missing port);0 = OS 自动分配,仅 app 类允许 (其他类报 port 0 (auto) is only supported for class 'app'),实际端口经 XS_ServerInfo.PortBound 回读
tlsbool · false 启用 TLS 端口;udp 上禁止 (tls on udp)
port_tlsuint · 443 与明文端口同 IP 冲突时拒绝启动
ip_tlsstring · 复用 ip TLS 监听地址
backloguint32 · — 直通 xrt 监听配置;范围校验
recv_limitsize · — ≤SIZE_MAX;udp 上 ≤65535 (recv limit out of range)
path / devlang / devfilestring · — 服务级脚本缺省,合成进 DefaultHost
dev_inc / dev_libstring · — 脚本 include / 库搜索目录(分号分隔,相对 appPath)
其余字段 任意 进入 server->Custom(应用经 XS_CustomReadUInt 等自读)
app 节点(class: "app" 专属,window 9 字段)
class: "app" 不是第六种协议,而是 http 节点的前端化:内部完全走既有 http 装配路径(host_default / hosts / static / TLS / 热重载全部同义),只多一个 window 描述符与前端生命周期——启动显示加载窗 → 服务就绪自动打开 window.url → 关窗按 close 语义优雅停机。窗口是显示层、服务是本体:窗口线程任何失败只降级为日志,绝不让引擎装配与停机链走 fail 路径。
window 字段 类型 / 默认 约束与说明
titlestring · "xs app" 窗口标题
width / heightuint · 1280 / 800 初始尺寸(像素);取值范围 200–32767
min_width / min_heightuint · 0 最小尺寸限制;0 = 不限制
urlstring · "/" 就绪后打开的页面;相对路径用实际端口拼 http://<ip>:<PortBound>/…,允许绝对 URL
devtoolsbool · false 启用 WebView2 开发者工具
closestring · "stop" stop = 关窗优雅停掉整个进程;hide = 隐藏窗口服务继续(再次双击经单实例检测唤起既有窗口;停服务走信号路径)
install_fallbackstring · "ask" Runtime 缺失时的兜底(取值见下表);任何失败一律落到 headless 继续
install_fallback 取值 语义
"ask"弹窗问询是否安装 WebView2 Runtime(面向普通用户的缺省形态)
"silent"静默下载安装,无人值守场景
"headless"不尝试安装,直接降级为 headless 服务
port: 0 自动分配 :仅 app 类允许(其他类 fail-fast);内核原子分配后回读实际端口(不做"探测→关闭→再绑定",避免 TOCTOU 竞态)。热重载按服务名粘滞(跨 generation 稳定,已开窗口无感知换端);跨重启稳定请配固定端口。完整平台 / 变体降级矩阵见 webview 参考页 。
主机级字段(host_default / hosts[i],9)
字段 类型 / 默认 约束与说明
enabledbool · true 主机开关
namestring · 必填 server 内唯一、非空(重复 / 空均 fail-fast)
hoststring · — 分号分隔域名;http/ws 的启用 vhost 必填非空
pathstring · — 静态资源根;目录缺失 fail-fast
devlangstring · — static 纯静态 / c TCC 脚本 / 应用自定
devfilestring · — 脚本入口;文件缺失编译失败
tls_ca / tls_cert / tls_keystring · — PEM 路径;host 级证书 → SNI 表数据源
dev_inc / dev_libstring · — host 级脚本搜索路径
其余字段 任意 进入 host->Custom(static.* 旋钮见下)
host_default 恒存在(未配置时由服务级脚本字段合成);hosts[] 数量不限,vhost 未命中时回落 default。
Custom 旋钮(server 级,应用自读)
字段 类型 / 默认 说明
header_limituint · — 请求头上限(超限 431)
path_limituint · 2048 路径长度上限(超限 414)
body_limituint · — 请求体上限(超限 413)
idle_timeoutuint · — 空闲超时毫秒(http/ws/tcp),到点服务端关闭
ws_message_limituint · — WS 消息上限,超限 close 1009
ws_protocolstring · — 强制子协议;启动时校验合法性,类型错误 fail-fast
读取方式:配置进 server->Custom(xvalue),demo 用 XS_CustomReadUInt 严格非负解析。
静态层旋钮(host 级 Custom)
字段 类型 / 默认 约束与说明
static.headers对象 · — ≤8 字段 ;禁 8 种保留头(含 Transfer-Encoding、Connection),违者 fail-fast
static.index数组 · index.html 目录索引候选,逐个回落
static.error_pages对象 · — 键必须 400–599(越界 fail-fast);值相对 path 的错误页路径
static.deny_dotfilesbool · true 点开头文件恒拒(含穿越尝试)
路径解析规则
所有文件路径按配置文件所在目录 转绝对路径——配置目录自包含,可整体搬移
不带参数运行时,XServer 在可执行文件所在目录 找 xs.json;参数可显式指定
dev_inc 相对路径相对 appPath;注意第 6 章的"诱饵头"边界
acme 节(证书自动续签,需 xacme 扩展)
根级 acme 节启用内置 ACME 守护:每日定时检查,证书剩余寿命不足阈值时自动 DNS-01 续签并热替换(连接不断)。凭据全部走独立文件 (不进 xs.json):账户私钥、DNS 凭据、EAB、信任锚。
字段 类型 / 默认 约束与说明
enabledbool · false 总开关;false 时守护不启动
account_key_filestring · — 账户私钥 PEM(ES256);空 = 各 CA 首用时自注册。同一把钥可在多个 CA 各自开户
emailstring · — ACME 账户联系邮箱
dns_key_filestring · 必填 DNS-01 凭据 JSON:{"access_key_id":"…","access_key_secret":"…"}(当前支持 alidns)
renew_before_daysuint · 30 1–89;剩余寿命不足该天数即触发续签
check_timestring · — 每日固定检查时刻 "HH:MM"(00:00–23:59);与 check_interval_hours 互斥
check_interval_hoursuint · 12 间隔制(1–720);启动 5 分钟后首查,此后按间隔
certs[]数组 · 必填 证书组:{name, domains[], out_dir}——一张证书组 = 一个 tls 目录,续签产物按 acme.sh 同构布局写入(cert.pem=叶 / ca.pem=中间链 / key.pem / fullchain.pem)
directories[](CA 回退链)
字段 必填 说明
name否 展示名;空 = 取 URL 域名
url是 ACME directory 地址;URL 去重 fail-fast
ca_file否 该 CA 的信任锚 PEM;空 = 系统信任库
eab_kid_file / eab_hmac_file成对 需 EAB 注册的 CA(如 litessl)填;只填一个 fail-fast
兼容:单字段 directory(+ 根级 ca_file)等价单元素链,与 directories 同现报错。运行语义:首个成功者胜出 ——按序逐 CA 尝试,某 CA 失败自动落下一个;本地证书充足时不联系任何 CA;到期续签从链首重试(主 CA 恢复自动回归)。守护线程自建网络引擎、配置启动时深拷贝(重启生效)。
续签判断的依据是 acme-store/ 内的证书(非 host tls 目录);强制重签 = 删 acme-store/certs/<主域名>/ 后重启(5 分钟后首查)。无 xacme 变体:配置存在时打提示忽略,守护恒空操作。