A little HTTP server in Kotlin
This project aims to develop a simple, but extensible framework for building TCP servers of any purpose. It comes with HTTP/1.1 by default, but it can be used with any protocol, as long as the support for it is implemented.
Server features:
- Event-based processing (based on Interruptible Tasks)
- Secure TLS Sockets (with HTTPS)
- Slowloris-proof and handles many connections well
HTTP implementation features:
- GZIP response compression
- HTTP Proxy
- Static resources support
- URL aliasing support
- Exception Mappers for global exception mapping support
See Example.kt
fun main() {
// bind plain TCP on 8080, use HTTP
bindTCP(port = 8080, protocol = Http) {
// use HTTP 1.1 on this port
useHttp11()
// use GZIP
withResponseWriter(GZipResponseWriter())
// configure /* mapping
url(index("/")) {
// a static index of classpath resources
staticIndex("classpath:/")
}
// configure /example mapping
url(exact("/example")) {
// a static page
staticPage("classpath:/index.html")
}
// configure /proxy mapping
url(exact("/proxy")) {
// a proxy of https://httpbin.org
proxy("https://httpbin.org/")
}
// make / an alias of /index.html
alias(exact("/") to "/index.html")
}.start() // start server on port 8080
// bind secure TCP on 8443, use HTTP and a self signed certificate
bindSecureTCP(
port = 8443,
protocol = Http,
serverCertificate = selfSignedCertificate()
) {
// use HTTP 1.1 on this port
useHttp11()
// configure /* mapping
url(index("/")) {
// a static index of classpath resources
staticIndex("classpath:/")
}
// configure /proxy mapping
url(exact("/proxy")) {
// a proxy of https://httpbin.org
proxy("https://httpbin.org/")
}
// make / an alias of /index.html
alias(exact("/") to "/index.html")
}.start() // start server on port 8443
}
This is an example usage of the ksockserver. It contains one Kotlin file, which starts the application on ports 8080 and 8443 (SSL). There are the following endpoints available:
/
or/index.html
- a sample HTML file/proxy
- a proxy to https://httpbin.org//example
(8080 only) - a static resource (HTML file)
This module contains the logic of managing the socket and handling connections. There are socket configuration classes and dispatchers for plain TCP and secure TCP sockets.
The ksockserver-http-core
module contains the base models and interfaces used in HTTP-related libraries, and it also
contains a few common helper functions.
This module relies on ksockserver-http-core
and ksockserver-dispatcher
and it contains the logic of handling
reading of HTTP requests, mapping URLs to resource handlers and writing HTTP responses. It also handles the exceptions
during request processing and maps them according to registered ExceptionMappers
In this module there is logic that handles reading files and serving them as static resources. It is meant to be used
with a ksockserver-http-server
.
This little module enables GZip compression algorithm in HTTP responses.
This module is used to configure a URL mapping as a proxy of another HTTP(S) application.