>>/9123/
You are wrong, anon. Not all processes need to fork (or prefork) to handle a connection. Some are threaded (it's quite different from forking, because processes don't CoW, but share memory) and some are evented (like nginx, a contemporary Apache, or any Node.JS app) which can handle an arbitrary number of sockets in a single process (it's often combined with threading to support multiple CPU cores).
I'm not sure about your caching proposal, there are various optimizations that are enabled by default. Like kernel doing cache of filesystem access which should work especially well for often accessed resources if you have enough RAM. If you want to keep web browsers from repeatedly requesting the same resource, it's just the Last-Modified header (and If-Modified-Since) and all contemporary webservers do that for static content by default. Yes, you can enable ETag (this is something similar to what you propose with checksumming), but I don't really suppose ETag is much better than Last-Modified unless your application changes mtime (last modified time) of served static content often without changing the static content itself.