https://github.com/jamesorlakin/simple-http-echo
A simple wildcard HTTP app to return headers and paths for reverse proxy debugging
https://github.com/jamesorlakin/simple-http-echo
debug hacktoberfest http proxy
Last synced: 2 months ago
JSON representation
A simple wildcard HTTP app to return headers and paths for reverse proxy debugging
- Host: GitHub
- URL: https://github.com/jamesorlakin/simple-http-echo
- Owner: jamesorlakin
- License: apache-2.0
- Created: 2022-11-26T09:57:52.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-10-15T17:25:27.000Z (over 1 year ago)
- Last Synced: 2025-01-31T07:33:09.723Z (4 months ago)
- Topics: debug, hacktoberfest, http, proxy
- Language: Go
- Homepage:
- Size: 7.81 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Simple HTTP Echo
This is the world's simplest project - a small HTTP server that returns a dump of the HTTP request metadata passed to it with a status of 200.
Similar to the 'anything' endpoint of [httpbin](https://httpbin.org/) but works for all paths. It'll log requests too.## Why?
I've found myself in multiple situations having to debug reverse proxies, including AWS ALB rules, AWS API Gateway headers, Kubernetes Ingress path matching, and Nginx `proxy_pass` with a URL defined from a variable (fun fact, in that situation Nginx will stop caching DNS, but `proxy_pass` becomes literal so you need to add regex matching to the `location` block *and* add remember to add query path values back - that was fun to investigate...).
I've also had proxies swallow `X-Forwarded-*` headers due to misconfigured middleware - this was the final straw to whip up this small utility.## Usage
Simple HTTP echo is a simple Go binary with only one option: the `PORT` environment variable (which defaults to 3000 if not set).
There's a container image for ease of use with Docker or Kubernetes: [`jamesorlakin/simple-http-echo:latest`](https://hub.docker.com/r/jamesorlakin/simple-http-echo).
### Response Example
```
curl --verbose -H "X-Forwarded-Proto: some-test-header" http://localhost:3000/any-path-can-go-here
* Trying 127.0.0.1:3000...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 3000 (#0)
> GET /any-path-can-go-here HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.68.0
> Accept: */*
> X-Forwarded-Proto: some-test-header
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Sat, 26 Nov 2022 10:13:04 GMT
< Content-Length: 528
< Content-Type: text/plain; charset=utf-8
<
{
"Method": "GET",
"URL": {
"Scheme": "",
"Opaque": "",
"User": null,
"Host": "",
"Path": "/any-path-can-go-here",
"RawPath": "",
"OmitHost": false,
"ForceQuery": false,
"RawQuery": "",
"Fragment": "",
"RawFragment": ""
},
"Proto": "HTTP/1.1",
"Header": {
"Accept": [
"*/*"
],
"User-Agent": [
"curl/7.68.0"
],
"X-Forwarded-Proto": [
"some-test-header"
]
},
"ContentLength": 0,
"Host": "localhost:3000",
"RemoteAddr": "127.0.0.1:38782",
"RequestURI": "/any-path-can-go-here"
* Connection #0 to host localhost left intact
```