类对象支持库。路径:支持库 → 扩展类库 → HTTP服务端类。
类型名写「HTTP服务端类」。声明时自动创建。
本机 HTTP/1.1 监听;可选 HTTPS(Windows Schannel)。用于 Webhook、本机 API、简易静态应答。与 HTTP类(客户端)分开。
在 IDE 里开通 HTTP服务端类 后才能编译。编进用户程序之后,运行时不再检查授权。
快速开始(明文)
HTTP服务端类 srv
函数 处理Ping(整数 请求ID, 文本 请求方法, 文本 路径, 文本 查询串,
文本 请求头, 文本 正文, 文本 IP, 整数 端口) {
srv.应答(请求ID, "pong")
}
函数 主窗口.创建完毕() {
srv.路由("GET", "/ping", &处理Ping)
srv.挂载("/static", "www") // GET /static/a.txt → www\a.txt
srv.置保持连接(真) // 默认即真
如果 (!srv.启动(8080, "127.0.0.1")) {
输出(srv.取错误())
}
}
浏览器或其它进程的 HTTP类 访问 http://127.0.0.1:8080/ping 应得到 pong。
同进程用 HTTP类 回环时请 异步(真),再用定时器轮询 是否完成()——服务端回调也在 UI 线程,同步 提交 会堵消息泵。
请求处理顺序
- 路由:
路由(请求方法, 路径, &回调),路径精确匹配;方法空 /*/ANY= 不限 - 静态挂载:
挂载(URL前缀, 目录),仅 GET/HEAD;防..穿越;目录 URL 尝试index.html - 请求到达:默认回调
- 皆未命中 → 404
HTTPS(证书)
与 TCP类 / WebSocket类 相同,支持:
| 方式 | 方法 | 说明 |
|---|---|---|
| PFX/P12 | 置TLS证书(证书文件, [密码]) |
参数为 PFX/P12 文件路径(不是证书显示名) |
| PEM | 置PEM证书(证书文件, 私钥文件) |
两个 文件路径:证书链 + 未加密私钥 |
| ACME | 申请证书(域名, [邮箱], [保存目录]) |
Let’s Encrypt HTTP-01;写入目录后自动 置PEM证书 |
| 场景 | 做法 |
|---|---|
| 本机联调 | PowerShell 自签 PFX,或 mkcert |
| 已有 PEM | 直接 置PEM证书 |
| 公网域名 | 申请证书(须 公网 80→本机),或外部 Certbot 后再 置PEM证书 |
路径怎么填(不必用「合并路径」)
参数填的是磁盘上的文件路径,不是 Windows 证书存储里的「证书名称」。
- 相对路径:相对进程当前工作目录(调试时常为 exe 所在目录)。例:
"server.pfx"、"certs\fullchain.pem"。 - 绝对路径:直接写完整路径。例:
"D:\\ssl\\fullchain.pem"。 合并路径:可选便利写法,用于把「目录 + 文件名」拼成一条路径;不是必须。证书已在固定位置时,直接写路径字符串即可。
加载成功后可用 取证书路径() / 取私钥路径() 回读刚才传入的路径(PFX 时私钥路径为空)。
本机自签 PFX:
$c = New-SelfSignedCertificate -DnsName "localhost","127.0.0.1" -CertStoreLocation Cert:\CurrentUser\My
$pwd = ConvertTo-SecureString -String "ypl" -Force -AsPlainText
Export-PfxCertificate -Cert $c -FilePath server.pfx -Password $pwd
srv.置TLS(真)
如果 (!srv.置TLS证书("server.pfx", "ypl")) { // 相对路径;也可写绝对路径
输出(srv.取错误())
返回()
}
srv.启动(8443, "127.0.0.1")
PEM(两文件都是路径;私钥勿加密):
srv.置TLS(真)
srv.置PEM证书("fullchain.pem", "privkey.pem")
// 可选:srv.置PEM证书(合并路径(取当前目录(), "fullchain.pem"), 合并路径(取当前目录(), "privkey.pem"))
srv.启动(443, "0.0.0.0")
申请证书(ACME HTTP-01)
阻塞调用(可能数十秒),不要塞在短 UI 回调里空等太久。流程:
- 先
启动(80, "0.0.0.0")(明文),保证公网能访问/.well-known/acme-challenge/... 申请证书("example.com", "you@example.com", "certs")→ 写出certs\fullchain.pem/privkey.pem并自动加载(第三参是保存目录路径,相对或绝对均可)停止()后置TLS(真),再启动(443,...)
沙箱(防刷正式额度):进程环境变量 YPL_ACME_STAGING=1。
定时续期示例(与当前时间比天数):如果 (取时间差(取当前时间(), srv.取到期时间(), 4) < 30) { srv.申请证书(...) }
后台处理与线程池
默认:请求到达 / 路由 在 UI 线程(可改控件;同进程回环请 HTTP类.异步(真))。
高吞吐 API / Webhook:
srv.置后台处理(真) // 回调进工作线程池;勿直接改控件
srv.置工作线程数(16) // 连接处理 + 后台回调线程数,默认 8
srv.置最大并发(64) // 处理中请求上限;0=不限
srv.启动(8080, "0.0.0.0")
连接不再「一连接一线程」,而是固定线程池 + 有界队列;队列满时拒绝新连接。静态目录 / ACME 仍不经业务回调。
要点
| 项 | 说明 |
|---|---|
| 回调线程 | 默认 UI;置后台处理(真) 后为工作线程池 |
| 应答 | 回调内 应答 等;未应答 → 500 |
| Keep-Alive | 默认开 |
| 静态目录 | 挂载 不经 UI |
| TLS | 置TLS + 证书方法须在 启动前(申请证书时挑战走明文 80) |
| 绑定 | 本机联调用 127.0.0.1 |
常用方法
- 生命周期:
启动/停止/是否在监听/取错误/重置 - 路由/静态:
路由/清除路由/挂载/清除挂载 - Keep-Alive:
置保持连接/取保持连接 - 并发:
置后台处理/取后台处理/置工作线程数/取工作线程数/置最大并发 - TLS:
置TLS/取TLS/置TLS证书/置PEM证书/申请证书/取到期时间/取证书路径/取私钥路径 - 限制:
置最大正文/置读超时 - 读请求 / 写响应:同前
非目标(当前)
HTTP/2、chunked、路径参数路由、DNS-01 / 通配符、后台自动续期线程、加密私钥 PEM、双向 mTLS、IOCP 级高并发(以后可另旁路类)、WebSocket 升级(用 WebSocket类)。
收费位:supportlib.httpserver(仅开发期验票)。