Skip to main content

HTTP Server

A simple HTTP server with multiple endpoints, implemented as a Wasm component and packaged for Cosmonic Control.

Deploy with Helm

helm install http-server oci://ghcr.io/cosmonic-labs/charts/http-server

Repository: cosmonic-labs/http-server
Languages: Go
Interfaces: wasi/http

Get Started

Development requirements:

Clone the cosmonic-labs/control-demos repository:

git clone https://github.com/cosmonic-labs/control-demos.git
cd control-demos/http-server

Start the development loop:

wash dev

View the code and make changes in main.go.

Send a Request

You can send a request to the following endpoints:

GET /

Returns a list of available endpoints and their descriptions.

curl http://localhost:8000/
  /error - return a 500 error
  /form - echo the fields of a POST request
  /headers - echo your user agent back as a server side header
  /post - echo the body of a POST request

GET /error

Returns a 500 Internal Server Error.

curl -v http://localhost:8000/error
* Host localhost:8000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:8000...
* connect to ::1 port 8000 from ::1 port 51390 failed: Connection refused
*   Trying 127.0.0.1:8000...
* Connected to localhost (127.0.0.1) port 8000
> GET /error HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/8.7.1
> Accept: */*
> 
* Request completely sent off
< HTTP/1.1 500 Internal Server Error
< content-type: text/plain; charset=utf-8
< x-content-type-options: nosniff
< vary: origin, access-control-request-method, access-control-request-headers
< access-control-allow-origin: *
< access-control-expose-headers: *
< connection: close
< transfer-encoding: chunked
< date: Thu, 19 Dec 2024 23:52:34 GMT
< 
Something went wrong
* Closing connection

GET /headers

Returns your User-Agent in the response headers.

curl -v http://localhost:8000/headers
* Host localhost:8000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:8000...
* connect to ::1 port 8000 from ::1 port 51499 failed: Connection refused
*   Trying 127.0.0.1:8000...
* Connected to localhost (127.0.0.1) port 8000
> GET /headers HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/8.7.1
> Accept: */*
> 
* Request completely sent off
< HTTP/1.1 200 OK
< x-your-user-agent: curl/8.7.1
< vary: origin, access-control-request-method, access-control-request-headers
< access-control-allow-origin: *
< access-control-expose-headers: *
< connection: close
< transfer-encoding: chunked
< date: Thu, 19 Dec 2024 23:53:49 GMT
< 
* Closing connection
Check headers!

POST /form

Echoes back form data from a POST request.

curl -X POST -d "field1=value1&field2=value2" http://localhost:8000/form
field2: value2
field1: value1

POST /post

Echoes back the entire body of a POST request.

curl -X POST -d "Hello World" http://localhost:8000/post
Hello World

Clean Up

You can cancel the wash dev process with Ctrl-C.

Build the Wasm Binary

Compile the component:

wash build

The .wasm binary will output to ./build.

Learn More