In reference to this answer:
https://stackoverflow.com/a/20309097/99717
My understanding is that transmitting HTTP 1.1 message bodies is 8-bit clean: we can send any octets and there's nothing about one octet vrs some other octet that makes one more or less likely to be properly transmitted. We don't need to, e.g., Base64 encode our message bodies before we send them.
I have assumed that headers (and request and status line) are the same. Headers are historically spec'd ISO-8859-1, and the spec now recommends US-ASCII (see last paragraph of section), but that's not because headers, for example, are somehow not 8-bit clean (ISO-8859-1 is an 8-bit encoding), but because it makes sense, for other reasons, to spec them that way. So, if we're going to stick not-8-bit-ASCII bytes into our headers, we Base64 encode them first because it's easy to add ASCII to ASCII, whereas doing anything else would be (way) more complicated.
Am I missing something here?
(edit: the spec does not allow "any" octets in HTTP headers -- it limits valid octets)