Skip to content

Latest commit

 

History

History
40 lines (25 loc) · 2.95 KB

File metadata and controls

40 lines (25 loc) · 2.95 KB

Agent 指引(Zoox)

面向在本仓库内改代码的自动化助手;与 HTTP 服务协议相关的实现经验如下。

文档

  • 用户可见的配置与协议说明:docs/guides/configuration.md(含 HTTP/2、h2c、HTTP/3、环境变量)。
  • 业务脚手架 CLI(zoox new / zoox gen module、模板目录树、变量表):docs/guides/scaffolding.md;实现位于 cmd/zoox/cmd/zoox/scaffold/templates/

文档站点(VitePress / Node)

  • 不要在仓库根目录找 package.json:VitePress 与 pnpm 相关文件在 docs/ 下,包括 docs/package.jsondocs/pnpm-lock.yamldocs/tsconfig.json
  • 本地开发:先 cd docs,再 pnpm installpnpm run docs:dev / docs:build / docs:preview(脚本里 VitePress 根目录为当前目录 .)。
  • CI: .github/workflows/docs.ymlworking-directory: docs 下执行 pnpm installpnpm run docs:buildactions/setup-nodecache-dependency-pathdocs/pnpm-lock.yaml
  • 人类可读说明:README_DOCS.md

服务入口与协议(实现位置)

  • 启动与并发:application.goserve() 使用 errgroup 并行跑 serveHTTPserveHTTPSserveHTTP3
  • TLS 构建:buildTLSConfig();HTTPS 与 HTTP/3 通过闭包内 sync.Once 共享同一次构建结果,避免重复读盘与竞态。
  • HTTP/2(TLS)serveHTTPShttp2.ConfigureServer 之后 tls.NewListener + Serve。若 tls.Config.NextProtos 为空,buildTLSConfig 会设为 h2http/1.1,否则在仅依赖 tls.NewListener 时客户端可能一直落到 HTTP/1.1。
  • h2cserveHTTPEnableH2CNetworkType == "tcp" 时用 h2c.NewHandler;不要在公网裸奔。
  • HTTP/3serveHTTP3 使用 github.com/quic-go/quic-go/http3http3.ConfigureTLSConfig 从共享 TLS 派生 QUIC 用配置;需 EnableHTTP3HTTPSPort、有效证书,且当前仅 TCP 网络(非 unix socket)。HTTPS 侧可通过 wrapWithAltSvcAlt-SvcHTTP3AltSvcMaxAge < 0 可关闭)。

配置字段与环境变量

  • config/config.goEnableH2CEnableHTTP3HTTP3PortHTTP3AltSvcMaxAge
  • 环境变量见 constants.goENABLE_H2CENABLE_HTTP3HTTP3_PORTHTTP3_ALTSVC_MAX_AGE

测试

兼容性注意

  • responseWriter 实现 Hijack;在 HTTP/2 连接上 Hijack 不可用(与 net/http 行为一致)。WebSocket/原始 TCP 场景需单独考虑协议与升级路径。

本地构建

  • 若在父目录启用了 Go workspace 且与单模块开发冲突,可对仅针对本模块的命令使用 GOWORK=off(以本机环境为准)。