Not enough mention of how people were “sore wroth”, but maybe that goes without saying, being the default state of web developers.
What’s the alternative to something like user-agent?
SMTP has explicit feature negotiation (retro fitted by sending EHLO instead of HELO and seeing whether you get back an error or not), but I’ve still seen an SMTP sender attempt to divine whether the receiver was a known buggy implementation (via idiosyncratic responses) in order to work around bugs.
A large installed base is a powerful force, how best to work with it?
XMPP had an interesting approach: participants in the protocol send an opaque version string, useful only as a cache key. Then other participants can interrogate for the presence of other features, using their preferred mix of in-band inquiries and tests for specific bugs.
The downside is that this is heavyweight for the server, and despite my personal fondness for the protocol it was often considered difficult to implement.