REBOL [ Title: "Micro Web Server" Date: 10-Jun-2000 File: %webserver.r Purpose: { Here is a web server that works quite well and can be run from just about any machine. It's not only fast, but its also small so it's easy to enhance. } History: [ 10-Jun-2000 "Buffers the entire request, adds address" 22-Jun-1999 "First posted" ] Notes: { Set the web-dir to point to the file directory that contains your web site files, such as index.html. } library: [ level: 'intermediate platform: none type: none domain: [web other-net] tested-under: none support: none license: none see-also: none ] ] web-dir: %. ; the path to where you store your web files listen-port: open/lines tcp://:80 ; port used for web connections errors: [ 400 "Forbidden" "No permission to access:" 404 "Not Found" "File was not found:" ] send-error: function [err-num file] [err] [ err: find errors err-num insert http-port join "HTTP/1.0 " [ err-num " " err/2 "^/Content-type: text/html^/^/" err/2 "

SERVER-ERROR

REBOL Webserver Error:" err/3 " " file newline

] ] send-page: func [data mime] [ insert data rejoin ["HTTP/1.0 200 OK^/Content-type: " mime "^/^/"] write-io http-port data length? data ] buffer: make string! 1024 ; will auto-expand if needed forever [ http-port: first wait listen-port clear buffer while [not empty? request: first http-port][ repend buffer [request newline] ] repend buffer ["Address: " http-port/host newline] print buffer file: "index.html" mime: "text/plain" parse buffer ["get" ["http" | "/ " | copy file to " "]] parse file [thru "." [ "html" (mime: "text/html") | "gif" (mime: "image/gif") | "jpg" (mime: "image/jpeg") ] ] any [ if not exists? web-dir/:file [send-error 404 file] if error? try [data: read/binary web-dir/:file] [send-error 400 file] send-page data mime ] close http-port ]