Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Don't forget bash.

    #!/bin/bash

    while :; do nc -l 80 < index.html; done


I was about to down-vote you, but that would be unfair, as this has roughly the typical level of correctness of most bash scripts.


It's absolutely (almost) correct! HTTP/0.9 does not require you to send back a status code or any headers. Some modern web servers even recognise a lone "GET /" to mean HTTP/0.9 and will respond accordingly.


This is exactly my point - it successfully accomplishes a very specific task, in a way that is fragile and context dependent, and completely fails to handle any errors or edge cases, or reckon with any complexity at all.


For anyone baffled by this: This works because HTTP/0.9 (just called "HTTP" at the time) worked in an extremely simple way, and browsers mostly retained compatibility for this.

HTTP/0.9 web browser sends:

    GET /
Netcat sends:

    <!doctype html>
    ...
Nowadays a browser will send `GET / HTTP/1.1` and then a bunch of headers, which a true HTTP/0.9 server may be able to filter out and ignore, but of course this script will just send the document and the browser will still assume it's a legacy server.


This is hilarious




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: