From 1406881071e21706fb9950dfe7d13069708ea61d Mon Sep 17 00:00:00 2001 From: yusing Date: Fri, 2 Jan 2026 01:17:28 +0800 Subject: [PATCH] feat(http/h2c): h2c test server with a Dockerfile - Implemented a basic HTTP/2 server that responds with "ok" to requests. - Updated dev.compose.yml to include a service for it --- cmd/h2c_test_server/Dockerfile | 18 ++++++++++++++++++ cmd/h2c_test_server/go.mod | 7 +++++++ cmd/h2c_test_server/go.sum | 4 ++++ cmd/h2c_test_server/main.go | 26 ++++++++++++++++++++++++++ dev.compose.yml | 9 +++++++++ 5 files changed, 64 insertions(+) create mode 100644 cmd/h2c_test_server/Dockerfile create mode 100644 cmd/h2c_test_server/go.mod create mode 100644 cmd/h2c_test_server/go.sum create mode 100644 cmd/h2c_test_server/main.go diff --git a/cmd/h2c_test_server/Dockerfile b/cmd/h2c_test_server/Dockerfile new file mode 100644 index 00000000..2cc2e4e1 --- /dev/null +++ b/cmd/h2c_test_server/Dockerfile @@ -0,0 +1,18 @@ +FROM golang:1.25.5-alpine AS builder + +HEALTHCHECK NONE + +WORKDIR /src + +COPY go.mod go.sum ./ +COPY main.go ./ + +RUN go build -o h2c_test_server main.go + +FROM scratch + +COPY --from=builder /src/h2c_test_server /app/run + +USER 1001:1001 + +CMD ["/app/run"] \ No newline at end of file diff --git a/cmd/h2c_test_server/go.mod b/cmd/h2c_test_server/go.mod new file mode 100644 index 00000000..ea308c6d --- /dev/null +++ b/cmd/h2c_test_server/go.mod @@ -0,0 +1,7 @@ +module github.com/yusing/godoxy/cmd/h2c_test_server + +go 1.25.5 + +require golang.org/x/net v0.48.0 + +require golang.org/x/text v0.32.0 // indirect \ No newline at end of file diff --git a/cmd/h2c_test_server/go.sum b/cmd/h2c_test_server/go.sum new file mode 100644 index 00000000..e87ebd9a --- /dev/null +++ b/cmd/h2c_test_server/go.sum @@ -0,0 +1,4 @@ +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= diff --git a/cmd/h2c_test_server/main.go b/cmd/h2c_test_server/main.go new file mode 100644 index 00000000..b49011fe --- /dev/null +++ b/cmd/h2c_test_server/main.go @@ -0,0 +1,26 @@ +package main + +import ( + "log" + "net/http" + + "golang.org/x/net/http2" + "golang.org/x/net/http2/h2c" +) + +func main() { + handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + w.Write([]byte("ok")) + }) + + server := &http.Server{ + Addr: ":80", + Handler: h2c.NewHandler(handler, &http2.Server{}), + } + + log.Println("H2C server listening on :8080") + if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Fatalf("ListenAndServe: %v", err) + } +} diff --git a/dev.compose.yml b/dev.compose.yml index bb964921..5d8927fd 100644 --- a/dev.compose.yml +++ b/dev.compose.yml @@ -54,6 +54,15 @@ services: - USERS=user:$$2a$$10$$UdLYoJ5lgPsC0RKqYH/jMua7zIn0g9kPqWmhYayJYLaZQ/FTmH2/u # user:password labels: proxy.tinyauth.port: "3000" + h2c_test_server: + build: + context: cmd/h2c_test_server + dockerfile: Dockerfile + container_name: h2c_test + restart: unless-stopped + labels: + proxy.#1.scheme: h2c + proxy.#1.port: 80 configs: parca: content: |