Skip to content

Latest commit

 

History

History
83 lines (56 loc) · 2.27 KB

README.md

File metadata and controls

83 lines (56 loc) · 2.27 KB

Echo Server

A very simple HTTP echo server with support for websockets and server-sent events (SSE).

The server is designed for testing HTTP proxies and clients. It echoes information about HTTP request headers and bodies back to the client.

Behavior

  • Any messages sent from a websocket client are echoed as a websocket message.
  • Requests to a file named .ws under any path serve a basic UI to connect and send websocket messages.
  • Requests to a file named .sse under any path streams server-sent events.
  • Request any other URL to receive the echo response in plain text.

Configuration

Port

The PORT environment variable sets the server port, which defaults to 8080.

Logging

Set the LOG_HTTP_HEADERS environment variable to print request headers to STDOUT. Additionally, set the LOG_HTTP_BODY environment variable to print entire request bodies.

Server Hostname

Set the SEND_SERVER_HOSTNAME environment variable to false to prevent the server from responding with its hostname before echoing the request. The client may send the X-Send-Server-Hostname request header to true or false to override this server-wide setting on a per-request basis.

Arbitrary Headers

Set the SEND_HEADER_<header-name> variable to send arbitrary additional headers in the response. Underscores in the variable name are converted to hyphens in the header. For example, the following environment variables can be used to disable CORS:

SEND_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN="*"
SEND_HEADER_ACCESS_CONTROL_ALLOW_METHODS="*"
SEND_HEADER_ACCESS_CONTROL_ALLOW_HEADERS="*"

WebSocket URL

Set the WEBSOCKET_ROOT environment variable to prefix all websocket requests made by the .ws user interface with a specific path.

Running the server

The examples below show a few different ways of running the server with the HTTP server bound to a custom TCP port of 10000.

Running locally

go get -u github.com/jmalloc/echo-server/...
PORT=10000 echo-server

Running under Docker

To run the latest version as a container:

docker run --detach -p 10000:8080 jmalloc/echo-server

Or, as a swarm service:

docker service create --publish 10000:8080 jmalloc/echo-server

The docker container can be built locally with:

make docker