Paul Hawke | afd3338 | 2013-03-11 09:03:11 -0500 | [diff] [blame] | 1 | ## What is "nanohttpd"? |
elonen | 03b577b | 2012-08-10 14:52:42 -0700 | [diff] [blame] | 2 | |
Paul Hawke | afd3338 | 2013-03-11 09:03:11 -0500 | [diff] [blame] | 3 | *NanoHttpd* is a light-weight HTTP server designed for embedding in other applications. |
| 4 | |
Paul Hawke | afd3338 | 2013-03-11 09:03:11 -0500 | [diff] [blame] | 5 | *NanoHttpd* has been released under a Modified BSD licence. |
Elonen | 0587be1 | 2012-08-11 02:07:17 +0300 | [diff] [blame] | 6 | |
ritchie | 63fa9f3 | 2015-05-08 08:19:39 +0200 | [diff] [blame] | 7 | current build status at https://travis-ci.org [](https://travis-ci.org/NanoHttpd/nanohttpd) |
| 8 | |
ritchie | b206779 | 2015-05-09 09:38:28 +0200 | [diff] [blame] | 9 | Test Coverage Status [](https://coveralls.io/r/NanoHttpd/nanohttpd) |
| 10 | |
Paul Hawke | be09227 | 2013-04-21 14:12:18 -0500 | [diff] [blame] | 11 | ## Core Features |
Paul Hawke | 41b4b6d | 2013-07-02 15:29:06 -0500 | [diff] [blame] | 12 | * Only one Java file, providing HTTP 1.1 support. |
Philipp Wiesemann | 92e45dd | 2014-05-17 23:27:35 +0200 | [diff] [blame] | 13 | * Two "flavours" - one at "current" standards and one strictly Java 1.1 compatible. |
Paul Hawke | be09227 | 2013-04-21 14:12:18 -0500 | [diff] [blame] | 14 | * Released as open source, free software, under a Modified BSD licence. |
| 15 | * No fixed config files, logging, authorization etc. (Implement by yourself if you need them.) |
Paul Hawke | 8dd1835 | 2013-09-02 17:23:13 -0500 | [diff] [blame] | 16 | * Experimental support for SSL (see the 'ssl-support' branch in git) |
| 17 | * Basic support for cookies |
Paul Hawke | a1e2a12 | 2013-05-22 09:50:14 -0400 | [diff] [blame] | 18 | * Supports parameter parsing of GET and POST methods. |
| 19 | * Rudimentary PUT support (added in 1.25). |
| 20 | * Support for HEAD and DELETE requests. |
| 21 | * Supports single and multi-value parameters (w/ a helper method) if needed. |
| 22 | * Supports file upload (since version 1.2, 2010) with minimal memory overhead. |
Paul Hawke | be09227 | 2013-04-21 14:12:18 -0500 | [diff] [blame] | 23 | * Never caches anything. |
| 24 | * Doesn't limit bandwidth, request time or simultaneous connections. |
Philipp Wiesemann | 92e45dd | 2014-05-17 23:27:35 +0200 | [diff] [blame] | 25 | * All header names are converted to lower case so they don't vary between browsers/clients. |
Paul Hawke | be09227 | 2013-04-21 14:12:18 -0500 | [diff] [blame] | 26 | * Very low memory overhead when processing even the largest of requests. |
Philipp Wiesemann | 92e45dd | 2014-05-17 23:27:35 +0200 | [diff] [blame] | 27 | * Temp file usage and threading model are easily customized. |
Paul Hawke | d8cc726 | 2013-06-18 17:20:36 -0400 | [diff] [blame] | 28 | * Persistent connections (Connection "keep-alive") support allowing multiple requests to be served over a single socket connection. |
Paul Hawke | be09227 | 2013-04-21 14:12:18 -0500 | [diff] [blame] | 29 | |
Paul Hawke | b891f27 | 2014-04-23 23:16:23 -0500 | [diff] [blame] | 30 | ## Websocket Support |
| 31 | * Tested on Firefox, Chrome and IE. |
| 32 | |
Paul Hawke | be09227 | 2013-04-21 14:12:18 -0500 | [diff] [blame] | 33 | ## Webserver Features |
| 34 | * Supports both dynamic content and file serving. |
| 35 | * Default code serves files and shows all HTTP parameters and headers. |
| 36 | * File server supports directory listing, ```index.html``` and ```index.htm```. |
| 37 | * File server supports partial content (streaming). |
| 38 | * File server supports ETags. |
| 39 | * File server does the 301 redirection trick for directories without ```/```. |
| 40 | * File server supports simple skipping for files (continue download). |
| 41 | * File server serves also very long files without memory overhead. |
Philipp Wiesemann | 92e45dd | 2014-05-17 23:27:35 +0200 | [diff] [blame] | 42 | * Contains a built-in list of most common MIME types. |
| 43 | * Runtime extension support (extensions that serve particular MIME types) - example extension that serves Markdown formatted files. Simply including an extension JAR in the webserver classpath is enough for the extension to be loaded. |
Paul Hawke | be09227 | 2013-04-21 14:12:18 -0500 | [diff] [blame] | 44 | |
Paul Hawke | 3c24d71 | 2014-04-23 23:48:40 -0500 | [diff] [blame] | 45 | *Thank you to everyone who has reported bugs and suggested fixes.* |