Python’s SimpleHTTPServer
has long been a go-to for quickly serving files from a directory. But what if you’re working with Go, or need something more robust and customizable? Enter simplehttpserver
, a Go-based alternative available on GitHub that not only replicates the simplicity of Python’s tool but also enhances it with features tailored for modern development and testing needs.
This guide will walk you through everything you need to know about using a Simple Http Server Golang Github project. We’ll cover its features, installation, and practical usage examples to get you up and running in minutes.
Why Choose a Go-Based Simple HTTP Server?
While Python’s SimpleHTTPServer
is convenient, a Go-based solution like simplehttpserver
offers several advantages:
- Performance: Go is known for its speed and efficiency. A Go-based server will generally outperform a Python equivalent, especially under load.
- Customization:
simplehttpserver
extends beyond basic file serving. It includes features like configurable TCP servers, TLS support, and customizable responses via YAML templates, making it incredibly versatile. - Single Binary: Go applications compile into standalone binaries, simplifying deployment and execution without external dependencies like a Python runtime.
- Modern Tooling: Built with Go, it integrates seamlessly into Go development workflows and benefits from Go’s rich ecosystem and tooling.
Key Features of simplehttpserver
This simple http server golang github project is packed with features that make it a powerful tool for developers and system administrators:
- HTTP/S Web Server: Serve files over both HTTP and HTTPS.
- File Server: Easily serve files from any specified directory.
- Request/Response Dumping: Verbose mode allows you to inspect HTTP requests and responses for debugging.
- Configurable Address and Port: Customize the listening IP address and port.
- TCP Server with YAML Rules: Go beyond HTTP with a configurable TCP server, allowing you to simulate various network services with custom YAML-based response rules.
- TLS Support: Enable TLS for both HTTP and TCP servers for secure communication.
- File Uploads: Enable file uploads via HTTP for convenient data reception.
- CORS Support: Configure Cross-Origin Resource Sharing (CORS) for web development scenarios.
- Basic Authentication: Secure your server with basic username/password authentication.
Alt text: MIT License badge indicating the open-source nature of the simple http server golang github project.
Installation: Getting simplehttpserver
To use this simple http server golang github tool, you need Go version 1.17 or later installed on your system. Once you have Go set up, installation is straightforward using the go install
command:
go install -v github.com/projectdiscovery/simplehttpserver/cmd/simplehttpserver@latest
This command downloads and installs the simplehttpserver
binary to your Go bin directory (usually $GOPATH/bin
or $HOME/go/bin
, which should be in your system’s PATH).
Basic Usage: Serving Files
The most common use case is serving files from a directory. By default, simplehttpserver
serves the current directory on port 8000. To start the server, simply run:
simplehttpserver
This will launch the server, making the contents of your current directory accessible via http://localhost:8000
.
Alt text: Contributions Welcome badge encouraging community participation in the simple http server golang github project.
Specifying a Different Directory
To serve a specific directory, use the -path
flag:
simplehttpserver -path /path/to/your/directory
Replace /path/to/your/directory
with the actual path to the directory you want to serve.
Changing the Listening Address and Port
You can customize the listening address and port using the -listen
flag. For example, to listen on 127.0.0.1:8080
:
simplehttpserver -listen 127.0.0.1:8080
Advanced Features: HTTPS, TCP, and More
This simple http server golang github project truly shines with its advanced features:
Enabling HTTPS
To serve content over HTTPS, use the -https
flag. For testing purposes, you can generate a self-signed certificate:
simplehttpserver -https -domain localhost
For production use, you’ll want to provide your own certificate and key files using -cert
and -key
flags:
simplehttpserver -https -cert cert.pem -key cert.key
Running a TCP Server
Beyond HTTP, simplehttpserver
can also function as a TCP server. Enable it with the -tcp
flag:
simplehttpserver -tcp
Combine it with -tls
for a secure TCP server:
simplehttpserver -tcp -tls
Customizing Responses with YAML Rules
One of the most powerful features is the ability to define custom responses for the TCP server (and even HTTP server to some extent) using YAML rules. Create a rules.yaml
file and specify it with the -rules
flag:
simplehttpserver -rules rules.yaml -tcp
The rules.yaml
file allows you to define match conditions (based on regex, exact match, or content contains) and corresponding responses. This is incredibly useful for simulating network services or creating mock APIs for testing.
Alt text: Go Report Card badge indicating code quality and best practices in the simple http server golang github project.
Use Cases and Scenarios
This versatile simple http server golang github tool can be used in various scenarios:
- Local Development: Quickly serve static files for web development.
- Testing APIs: Mock API endpoints with custom responses using YAML rules.
- Network Simulation: Simulate different network services for testing network applications.
- File Sharing: Easily share files within a local network.
- Educational Purposes: Learn about HTTP servers, TCP servers, and network protocols.
Conclusion
simplehttpserver
is a fantastic simple http server golang github project that provides a robust and feature-rich alternative to Python’s SimpleHTTPServer
. Its Go-based implementation ensures performance and efficiency, while its extensive feature set, including TCP server capabilities and YAML rule-based responses, makes it a powerful tool for development, testing, and beyond. Whether you need a basic file server or a customizable network simulator, simplehttpserver
is worth exploring.
Explore the GitHub repository to dive deeper into the code and contribute to this excellent project!