#!/bin/sh # Simple HTTP Server using Netcat (nc) # # Sends a greeting message and the date in the response. # Warning: Relies on the OpenBSD version of Netcat. # GNU netcat may or may not work. # Creating a FIFO so that the output of nc can be processed and used to determine the input. # Allows for "passing values back round" outfifo="/tmp/outfifo" rm -f "$outfifo" mkfifo "$outfifo" # Run forever while true; do cat "$outfifo" | \ nc -l localhost 1500 | \ while read -r line; do line=$(echo "$line" | tr -d '\r\n') echo "< $line" if echo "$line" | grep -qE '^GET /'; then # on reading the request line, extract a value from the request path and build the response name="$(echo "$line" | sed 's:GET /\([^ ]*\).*:\1:')" content="Hello $name, the date and time is $(date)." # Without Content-Length header, connection will not close properly len="${#content}" response="HTTP/1.1 200 OK\nContent-Length: $len\n\n$content" elif [ -z "$line" ]; then # end of request # send response once all of the request has been read printf "%b" "$response" > "$outfifo" fi done done