In general, headers are supposed to contain information relevant to routing, handing, debugging, etc. The body and key hold the message and message metadata.
There’s hardly any support for headers in SMTs. It would be great if we could filter by the value of the header. There’s already a predicate for existence of a header, how much harder can it be to check the value?