Websites smaller than 10 kilobytes

Originally published at: Websites smaller than 10 kilobytes | Boing Boing

8 Likes

These are fun! It’s nice to be reminded how fast the web could be.

I assumed all of those would be scam sites (especially from the URLs) but they aren’t! At least not the first ten, which I clicked on. It’s peoples’ resumes, small site enthusiasts, kids new to HTML, that sort of thing.

14 Likes

Visible layers of complexity and gilding are often seen as being elegant, be it in meat space or cyber.

There is an elegance in simplicity that is, all to often, under-appreciated.

8 Likes

Unless I’m very much mistaken, that’s small enough to fit in the initial “handshake” between your browser and a properly-configured web server …

There’s no handshake in HTTP and nothing special about 10KB. There’s a handshake in the next level down at TCP, but TCP packets have to fit in an MTU which is typically around 1500 bytes so you’d need 7 packets. Assuming a large enough window, that’s 2 packets for the initial SYN and SYN ACK, 1 for the request, 7 for the reply, and 2 more for the FIN and FIN ACK.

And those 10KB web pages are allowed to suck down additional files. I picked rutar.org at random and saw that it loads a 5KB CSS file and a 5KB favicon PNG file. Each of those causes another data request and reply. The Chromium browser wants to fetch them in parallel so it opens a second connection; that’s another SYN/SYN ACK and FIN/FIN ACK.

[I just finished a web server for a Raspberry Pi Pico, so I was down in the guts of the network protocols. I was pleased to learn how simple HTTP can be when you strip out the decorations.]

3 Likes

I looked at some of the lighter-weight sites that I’ve built and found that while none of them are close to 10K, they’d be a lot closer if it weren’t for web fonts and Google Analytics. Using the built-in system fonts and, erm, not helping Google (and others) to spy on people would probably shrink a lot of websites down. Canny use of SVGs would probably even allow you to get some graphics in there without too much bloat.

4 Likes

I used some testing shims from a static WordPress project to create the beginnings of a static site generator a few years ago. It actually works pretty well, although it lacks an RSS feed. Given that you only serve the HTML, it’s actually okay for production, even if it’s not really production-ready. The pages it generates would qualify for this project.

4 Likes

Oh, I also made this directory lister optimized for sharing images in messaging apps and social media. It’s pretty lightweight as well.

2 Likes

I’m reminded of when I read this,
(in case you haven’t seen it yet)
https://idlewords.com/talks/website_obesity.htm
Found it to be and illuminating and entertaining read!

3 Likes

And with each site sharing with us their likes… not a single site says they liked creating a <10kb website.

du micro-fu!

1 Like

Well, why isn’t my site in this list? www.nixiebunny.com is 5k. It doesn’t load any images.

7 Likes

7KB for the HTML file and 6KB for the inject.js script that it loads.

3 Likes

Fascinating. That’s not in my HTML, must be added by the host.

3 Likes

I’ve been there! I downloaded all those muzak rips from those cul-de-sac format records and put them in my ez listening playlist. maybe one day I’ll cut the files up into individual songs…

4 Likes

When I load nixiebunny.com, I don’t see any Javascript downloaded; just 2.68K of HTML, and a favicon.

So whatever’s injecting that ominously-named Javascript may be at @klossner’s ISP or something upstream rather than @nixiebunny’s host.

Incidentally, if you are making minimal websites, I recommend Better Motherfucking Website for a guide on how you can improve the appearance of your page enormously with just 7 lines of CSS. Unless, of course, you’re offended by profanity, in which case that’s probably not the right tutorial for you.

5 Likes

Yeah, there is no “initial handshake” of the type Rob imagines. There’s the TCP connection open handshake, but no data is passed in that handshake beyond the TCP session parameters. There is a handshake for HTTPS to establish encryption parameters, but again that also doesn’t pass any session data. And the HTTP protocol doesn’t have a handshake.

Here’s the actual TCP session traffic for loading the sdf.org web site over HTTPS as interpreted by tcpdump. The packets with S (SYN) flags are the for open handshake, packets with P (PSH) flags actually move session data, and F (FIN) flags are for the close handshake. ‘.’ (ACK) flags usually represent acknowledgements of receved session data and are often combined with those other packets.

root@glitch:~# tcpdump host sdf.org
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on wlp3s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
20:29:27.650938 IP glitch.45848 > sdf.org.https: Flags [S], seq 1310177151, win 64240, options [mss 1460,sackOK,TS val 2051199002 ecr 0,nop,wscale 7], length 0
20:29:27.739297 IP sdf.org.https > glitch.45848: Flags [S.], seq 4230855003, ack 1310177152, win 32768, options [mss 1400,nop,wscale 3,sackOK,TS val 1 ecr 2051199002], length 0
20:29:27.739339 IP glitch.45848 > sdf.org.https: Flags [.], ack 1, win 502, options [nop,nop,TS val 2051199091 ecr 1], length 0
20:29:27.745017 IP glitch.45848 > sdf.org.https: Flags [P.], seq 1:518, ack 1, win 502, options [nop,nop,TS val 2051199096 ecr 1], length 517
20:29:27.844869 IP sdf.org.https > glitch.45848: Flags [.], seq 1:1389, ack 518, win 4197, options [nop,nop,TS val 1 ecr 2051199096], length 1388
20:29:27.844871 IP sdf.org.https > glitch.45848: Flags [.], seq 1389:2777, ack 518, win 4197, options [nop,nop,TS val 1 ecr 2051199096], length 1388
20:29:27.844872 IP sdf.org.https > glitch.45848: Flags [.], seq 2777:4165, ack 518, win 4197, options [nop,nop,TS val 1 ecr 2051199096], length 1388
20:29:27.844945 IP glitch.45848 > sdf.org.https: Flags [.], ack 1389, win 501, options [nop,nop,TS val 2051199196 ecr 1], length 0
20:29:27.845070 IP glitch.45848 > sdf.org.https: Flags [.], ack 2777, win 495, options [nop,nop,TS val 2051199196 ecr 1], length 0
20:29:27.845103 IP glitch.45848 > sdf.org.https: Flags [.], ack 4165, win 485, options [nop,nop,TS val 2051199196 ecr 1], length 0
20:29:27.893356 IP sdf.org.https > glitch.45848: Flags [P.], seq 4165:4430, ack 518, win 4197, options [nop,nop,TS val 1 ecr 2051199196], length 265
20:29:27.893367 IP glitch.45848 > sdf.org.https: Flags [.], ack 4430, win 501, options [nop,nop,TS val 2051199245 ecr 1], length 0
20:29:27.900976 IP glitch.45848 > sdf.org.https: Flags [P.], seq 518:644, ack 4430, win 501, options [nop,nop,TS val 2051199252 ecr 1], length 126
20:29:27.964647 IP sdf.org.https > glitch.45848: Flags [P.], seq 4430:4688, ack 644, win 4197, options [nop,nop,TS val 1 ecr 2051199252], length 258
20:29:27.965463 IP glitch.45848 > sdf.org.https: Flags [P.], seq 644:1160, ack 4688, win 501, options [nop,nop,TS val 2051199317 ecr 1], length 516
20:29:28.200803 IP sdf.org.https > glitch.45848: Flags [P.], seq 4688:5453, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 765
20:29:28.200832 IP sdf.org.https > glitch.45848: Flags [P.], seq 5453:5636, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 183
20:29:28.200837 IP sdf.org.https > glitch.45848: Flags [P.], seq 5636:5735, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 99
20:29:28.200846 IP sdf.org.https > glitch.45848: Flags [P.], seq 5735:5836, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 101
20:29:28.200849 IP sdf.org.https > glitch.45848: Flags [P.], seq 5836:5985, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 149
20:29:28.201130 IP sdf.org.https > glitch.45848: Flags [P.], seq 5985:6117, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 132
20:29:28.201136 IP sdf.org.https > glitch.45848: Flags [P.], seq 6117:6255, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 138
20:29:28.201163 IP glitch.45848 > sdf.org.https: Flags [.], ack 6255, win 496, options [nop,nop,TS val 2051199552 ecr 2], length 0
20:29:28.201172 IP sdf.org.https > glitch.45848: Flags [P.], seq 6255:6385, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 130
20:29:28.201176 IP sdf.org.https > glitch.45848: Flags [P.], seq 6385:6521, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 136
20:29:28.201179 IP sdf.org.https > glitch.45848: Flags [P.], seq 6521:6659, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 138
20:29:28.201300 IP sdf.org.https > glitch.45848: Flags [P.], seq 6659:6799, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 140
20:29:28.202321 IP glitch.45848 > sdf.org.https: Flags [.], ack 6799, win 501, options [nop,nop,TS val 2051199554 ecr 2], length 0
20:29:28.202790 IP sdf.org.https > glitch.45848: Flags [P.], seq 6799:6933, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 134
20:29:28.202808 IP sdf.org.https > glitch.45848: Flags [P.], seq 6933:7065, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 132
20:29:28.202816 IP sdf.org.https > glitch.45848: Flags [P.], seq 7065:7201, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 136
20:29:28.203097 IP sdf.org.https > glitch.45848: Flags [P.], seq 7201:7335, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 134
20:29:28.203106 IP sdf.org.https > glitch.45848: Flags [P.], seq 7335:7471, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 136
20:29:28.203112 IP sdf.org.https > glitch.45848: Flags [P.], seq 7471:7613, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 142
20:29:28.203117 IP sdf.org.https > glitch.45848: Flags [P.], seq 7613:7749, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 136
20:29:28.203247 IP sdf.org.https > glitch.45848: Flags [P.], seq 7749:7846, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 97
20:29:28.203253 IP sdf.org.https > glitch.45848: Flags [P.], seq 7846:7980, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 134
20:29:28.203537 IP sdf.org.https > glitch.45848: Flags [P.], seq 7980:8118, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 138
20:29:28.203546 IP sdf.org.https > glitch.45848: Flags [P.], seq 8118:8254, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 136
20:29:28.203550 IP sdf.org.https > glitch.45848: Flags [P.], seq 8254:8392, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 138
20:29:28.203554 IP sdf.org.https > glitch.45848: Flags [P.], seq 8392:8530, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 138
20:29:28.203586 IP glitch.45848 > sdf.org.https: Flags [.], ack 8530, win 497, options [nop,nop,TS val 2051199555 ecr 2], length 0
20:29:28.203971 IP sdf.org.https > glitch.45848: Flags [P.], seq 8530:8668, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 138
20:29:28.204007 IP sdf.org.https > glitch.45848: Flags [P.], seq 8668:8798, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 130
20:29:28.204011 IP sdf.org.https > glitch.45848: Flags [P.], seq 8798:8940, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 142
20:29:28.204014 IP sdf.org.https > glitch.45848: Flags [P.], seq 8940:9080, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 140
20:29:28.204017 IP sdf.org.https > glitch.45848: Flags [P.], seq 9080:9216, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 136
20:29:28.204020 IP sdf.org.https > glitch.45848: Flags [P.], seq 9216:9346, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 130
20:29:28.204181 IP sdf.org.https > glitch.45848: Flags [P.], seq 9346:9476, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 130
20:29:28.204186 IP sdf.org.https > glitch.45848: Flags [P.], seq 9476:9582, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199317], length 106
20:29:28.204606 IP glitch.45848 > sdf.org.https: Flags [.], ack 9582, win 501, options [nop,nop,TS val 2051199556 ecr 2], length 0
20:29:28.258369 IP sdf.org.https > glitch.45848: Flags [.], seq 9582:10970, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199552], length 1388
20:29:28.258715 IP sdf.org.https > glitch.45848: Flags [P.], seq 10970:12068, ack 1160, win 4197, options [nop,nop,TS val 2 ecr 2051199552], length 1098
20:29:28.258764 IP glitch.45848 > sdf.org.https: Flags [.], ack 12068, win 501, options [nop,nop,TS val 2051199610 ecr 2], length 0
20:29:28.463197 IP glitch.45848 > sdf.org.https: Flags [P.], seq 1160:1574, ack 12068, win 501, options [nop,nop,TS val 2051199814 ecr 2], length 414
20:29:28.562901 IP sdf.org.https > glitch.45848: Flags [P.], seq 12068:13022, ack 1574, win 4197, options [nop,nop,TS val 2 ecr 2051199814], length 954
20:29:28.603839 IP glitch.45848 > sdf.org.https: Flags [.], ack 13022, win 501, options [nop,nop,TS val 2051199955 ecr 2], length 0
20:29:28.619516 IP glitch.45848 > sdf.org.https: Flags [P.], seq 1574:1983, ack 13022, win 501, options [nop,nop,TS val 2051199971 ecr 2], length 409
20:29:33.694693 IP sdf.org.https > glitch.45848: Flags [P.], seq 17042:17073, ack 1983, win 4197, options [nop,nop,TS val 13 ecr 2051200076], length 31
20:29:33.694731 IP glitch.45848 > sdf.org.https: Flags [.], ack 17073, win 501, options [nop,nop,TS val 2051205046 ecr 13], length 0
20:29:33.694810 IP sdf.org.https > glitch.45848: Flags [F.], seq 17073, ack 1983, win 4197, options [nop,nop,TS val 13 ecr 2051200076], length 0
20:29:33.695068 IP glitch.45848 > sdf.org.https: Flags [P.], seq 1983:2014, ack 17074, win 501, options [nop,nop,TS val 2051205046 ecr 13], length 31
20:29:33.695158 IP glitch.45848 > sdf.org.https: Flags [F.], seq 2014, ack 17074, win 501, options [nop,nop,TS val 2051205046 ecr 13], length 0
20:29:33.788663 IP sdf.org.https > glitch.45848: Flags [.], ack 1983, win 4197, options [nop,nop,TS val 13 ecr 2051205046,nop,nop,sack 1 {2014:2015}], length 0
20:29:33.788689 IP sdf.org.https > glitch.45848: Flags [.], ack 2015, win 4193, options [nop,nop,TS val 13 ecr 2051205046], length 0
^C
65 packets captured
75 packets received by filter
6 packets dropped by kernel

I think Rob is thinking of this (I know I was): Why your website should be under 14kB in size | endtimes.dev

It made the rounds a few weeks ago.

Well, I know why my sub 10k site isn’t:

The website must either be very noteworthy or some content from the website must have received at least 100 points on Reddit or Hacker News on at least one occasion.

1 Like

This topic was automatically closed after 5 days. New replies are no longer allowed.