Here I was thinking I had an 11-minute voiceover but I misread the timeline. I’ll never use a script, I’m too lazy. Enjoy my half-completed thoughts above. You’ll work it out. The protocol I was wrestling with was HTTP/0.9, not “HTML/0.9”. HTML is the document format; HTTP is the protocol carrying it. The following issues we encountered are in no particular order - it adds to the fun! 😉
Most of this tinkering goes back to around April 2022, and here we are in May 2023. I wanted to get the photos and notes up because somebody else might find them useful when trying to get an old computer onto the internet. If nothing else, they might save someone from chasing a few of the same problems!

Let’s start with the innocent NCSA Mosaic. At this stage we were running on a Macintosh Classic, complete with its Motorola 68000 and black-and-white screen. Its original hard drive had failed and we’d been trying RaSCSI, so this wasn’t exactly the most straightforward internet machine. Give me an LC 475 any day! Still, the Mosaic splash screen works well.

We even made it to the RetroJunkie homepage!

Like anything running way beyond what it was designed for, it crashed a good amount. Of course there’s no memory protection so Mac OS went down with it forcing a slow restart.

We ruled out Mosaic due to the crashes and really dated HTML support. Next up we had MacWeb by Tradewave. And can I say, it actually worked OK for our purposes. There is a patched version, 2.0c, that has some tweaks for black and white Macs even. Unfortunately, I picked the French localisation.

Forbidden address. Ahhh yes. I believe this was caused by Cloudflare doing something… what exactly - I can’t remember! But I was able to get it by accessing retrojunkie.net or the IP retrojunkie.net was hosted at. It’s the catch-all site in case anyone strays to my server’s IP address.

So I resorted to telnet, which is very old-internet friendly it turns out. A simple GET / sent to retrojunkie.net resulted in… a bad request… with a sprinkling of Cloudflare, which was supposed to be disabled. The screenshot catches that in all its glory.
A proper HTTP/0.9 request is just a one-line GET with no HTTP version token or request headers. There’s no Host header either, so it can’t choose between name-based virtual hosts. I messed with the proxy settings a bit more, possibly disabling Cloudflare completely for testing and…

Telnet successfully gets the root! This time I connected directly to the server’s IP and got the GeoCities HTML back from a simple GET /. By this point I’d opted to mess with the GeoCities subdomain. Now what about a web browser?

One IP address, one default website. That gave these older clients somewhere useful to land even without a Host header.

I only had Netscape 1.0 on hand in Windows via the MiSTer and a dial-up modem… as one does. But the IP address now resolves. Let’s test with the retrojunkie.net domain name…

And it works a charm.

Well, close enough to a charm. Especially given charset=UTF-8 wasn’t yet the rage and ISO-8859-1 would rule supreme for a while longer.
sudo tail -f /var/log/apache2/access.log
Tailing the Apache2 access log shows us:

MacWeb/F2.0 uses libwww/2.17 - There’s that F for French again…

Mosaic identifies itself in the log as MacMosaicB6 libwww2.09. The splash screen calls our copy version 1.0.3, so at least we know what this particular setup was reporting. That doesn’t mean every earlier Mac Mosaic version necessarily sent the same user-agent string.

And our Windows Netscape 1.0 identifies itself as Mozilla/1.0 (Windows).
What’s perhaps most interesting in these examples is the request protocol recorded by Apache. The old clients were reaching the server as HTTP/1.0. A real HTTP/0.9 request would just be a one-line GET /path with no HTTP version token and no request headers. Apache wasn’t detecting an “HTML version” here at all. I’d been mixing up the page format with the transport protocol.
This also corrects my earlier Macintosh Classic, RaSCSI and The Internet theory that the browsers were failing because they only supported HTTP/0.9. That conclusion did not survive testing, which is exactly why documenting the wrong turns is useful.
Sources
Here’s some of the pages I followed to get this to work, a big thanks to each of the authors! RFC 1945 also spells out the difference between the simple HTTP/0.9 request and a full HTTP/1.0 request.
- MDN - Evolution of HTTP
- Metalbabble: Connecting a Macintosh SE to the Internet with a Raspberry Pi (2020)
- Web browsers for antique Macs
- Kafsemo - Talking HTTP/0.9, 1.0, 1.1
- Toby Mackenzie - Supporting HTTP 0.9
- RFC 7230, Appendix A.2 - Changes from RFC 2616
- RFC 1945 - Hypertext Transfer Protocol HTTP/1.0, Sections 4 and 5