Very small HTTP/1.1 server requiring inetd or tcpsvd
Go to file
Neale Pickett db71c8d9c0 stop sending content-type for 304 responses 2011-08-17 13:58:22 -06:00
contrib Import upstream 1.10 2011-08-16 14:36:11 -06:00
CHANGES stop sending content-type for 304 responses 2011-08-17 13:58:22 -06:00
COPYING Import upstream 1.10 2011-08-16 14:36:11 -06:00
Makefile Quit blowing away make variables 2011-08-16 16:13:42 -06:00
README Import upstream 1.10 2011-08-16 14:36:11 -06:00
README.auth Import upstream 1.10 2011-08-16 14:36:11 -06:00
SPEED Import upstream 1.10 2011-08-16 14:36:11 -06:00
TODO Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer.h Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer_1.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer_2.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer_flush.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer_put.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer_putflush.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer_puts.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer_putspace.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer_putulong.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer_putulonglong.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
buffer_stubborn.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
byte.h Import upstream 1.10 2011-08-16 14:36:11 -06:00
byte_copy.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
byte_diff.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
cgi-post.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
convert.pl Import upstream 1.10 2011-08-16 14:36:11 -06:00
fmt.h Import upstream 1.10 2011-08-16 14:36:11 -06:00
fmt_ulong.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
fmt_ulonglong.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
fnord-conf Import upstream 1.10 2011-08-16 14:36:11 -06:00
http Import upstream 1.10 2011-08-16 14:36:11 -06:00
httpd.c stop sending content-type for 304 responses 2011-08-17 13:58:22 -06:00
scan.h Import upstream 1.10 2011-08-16 14:36:11 -06:00
scan_ulong.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
scan_ulonglong.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
str.h Import upstream 1.10 2011-08-16 14:36:11 -06:00
str_chr.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
str_copy.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
str_diff.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
str_diffn.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
str_len.c Import upstream 1.10 2011-08-16 14:36:11 -06:00
str_start.c Import upstream 1.10 2011-08-16 14:36:11 -06:00

README

Usage:

	tcpserver -v -RHl localhost -u 1234 -g 1234 0 80 ./httpd

Will log to stderr in the form

  127.0.0.1 200 23 localhost Links_(0.96;_Unix) none /index.html

where 127.0.0.1 is the client IP, 200 is the HTTP exit code, 23 is the
size of the content that was served (or 0 for unsuccessful exit codes),
localhost is the Host: header (the virtual host), the next token is the
user agent with spaces replaced by underscores, the next token (none) is
the Referer HTTP header or "none" if none was given, and the rest of
each line is the decoded requested URL.

fnord-httpd does simple virtual hosting.  If the Host: HTTP header is
there, fnord will try to chdir to a directory of that name, i.e. if the
client asks for "/" on host "www.fefe.de:80", fnord will look for
"www.fefe.de:80/index.html".  Fnord will also try the directory
"default" if no specific directory for the virtual host was there.  If
the directory is a dangling symlink and fnord was compiled with
-DREDIRECT (default), fnord will redirect the whole site.  Examples:

  lrwxrwxrwx    1 leitner  users          19 May  5 01:09 www.foo.de:80 -> http://www.baz.de/
  lrwxrwxrwx    1 leitner  users          20 May  5 01:12 www.bar.de:80 -> =http://www.baz.de/

http://www.foo.de/blub.html will be redirected to http://www.baz.de/blub.html.
http://www.bar.de/blub.html will be redirected to http://www.baz.de/.

fnord implements el-cheapo HTTP ranges (only byte ranges and only of the
form x-y, not multiple ranges).

fnord implements content type matching and Accepts: parsing, but the
content type table is compiled in, i.e. to change it, you have to change
the source code.  Shouldn't be a problem because you _have_ the source
code ;)

fnord implements HTTP redirection.  If a file is not found, but a
dangling symlink is there under the same name, fnord will issue a
redirection to the contents of that symlink.  To be RFC compliant, the
symlink must point to a full URL, i.e.

  ln -s ftp://foobar.math.fu-berlin.de/pub/dietlibc/dietlibc-0.11.tar.bz2 dietlibc-0.11.tar.bz2

fnord implements in-place substitution of .gif to .png and of * to *.gz
if the file is available and the client supports the mime-type and
content-encoding.  That means you can save substantial bandwidth by
having an index.html.gz for each index.html, as most clients can
transparently decode gzipped files.

fnord will change dots at the start of file or directory names to colons
in the query before trying to answer them.

fnord understands and implements keep-alive connections.

fnord can use sendfile on Linux to enable zero-copy TCP.

If fnord is compiled with CGI support enabled, it will regard files
whose names end with ".cgi" as CGI programs and try to execute them.
CGI programs starting with "nph-" will be handled as no-parse-header
CGIs.  Please see http://hoohoo.ncsa.uiuc.edu/cgi/interface.html for the
CGI specification.

fnord 1.3 introduced a different method of whole-host redirection, which
can still be enabled by compiling fnord with with -DOLD_STYLE_REDIRECT.
Files that are not found locally will be redirected to $REDIRECT_HOST
with the current URI stripped of leading slashes, i.e. if
http://your.server/foo/bar.html is requested but not found, and
$REDIRECT_HOST is set to http://www.yahoo.com/, a redirect to
http://www.yahoo.com/foo/bar.html will be issued.  If $REDIRECT_HOST is
unset but $REDIRECT_URI is set, the URI part will be discarded and all
URLs will be redirected to $REDIRECT_URI.