- Updated HAProxy configuration template to set all standard proxy headers for HTTP requests. - Added support for a unique request ID via `unique-id-format` and `unique-id-header` directives. - Implemented E2E tests for header validation, request correlation, and configuration correctness. - Enhanced documentation to explain usage and examples of proxy headers. - Updated CI workflows to include E2E tests for proxy headers.
37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Simple HTTP server that echoes all request headers"""
|
|
|
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
import json
|
|
|
|
class HeaderEchoHandler(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
self.send_response(200)
|
|
self.send_header('Content-Type', 'application/json')
|
|
self.end_headers()
|
|
|
|
# Collect all headers
|
|
headers = dict(self.headers)
|
|
|
|
# Add the client IP as seen by this server
|
|
response = {
|
|
'headers': headers,
|
|
'client_ip': self.client_address[0],
|
|
'x_forwarded_for': self.headers.get('X-Forwarded-For', 'NOT SET'),
|
|
'x_forwarded_host': self.headers.get('X-Forwarded-Host', 'NOT SET'),
|
|
'x_forwarded_port': self.headers.get('X-Forwarded-Port', 'NOT SET'),
|
|
'x_forwarded_proto': self.headers.get('X-Forwarded-Proto', 'NOT SET'),
|
|
'x_request_id': self.headers.get('X-Request-ID', 'NOT SET')
|
|
}
|
|
|
|
self.wfile.write(json.dumps(response, indent=2).encode())
|
|
|
|
def log_message(self, format, *args):
|
|
# Log to stdout
|
|
print(f"{self.address_string()} - {format % args}")
|
|
|
|
if __name__ == '__main__':
|
|
port = 8080
|
|
server = HTTPServer(('0.0.0.0', port), HeaderEchoHandler)
|
|
print(f'Header echo server running on port {port}...')
|
|
server.serve_forever()
|