#!/bin/sh # Simple HTTP Server using Netcat (nc) # # Sends a greeting message and the date in the response. # Info: 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 x="$(date)" len="$(echo "$x" | wc -c)" 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="$(echo "$content" | wc -c)" response="HTTP/1.1 200 OK\nContent-Length: $len\nContent-Type: plain/text\n\n$content" elif [ -z "$line" ]; then # end of request # send response once all of the request has been read echo -e "$response" > "$outfifo" fi done done