The majority of HTTP frameworks I’ve used store headers in a dictionary, because the common denominator between all headers is that they are string keys and string values.
To clarify: you might think that some headers are lists of strings, but that’s not actually true - the user can send any string to you. You really open yourself up to parsing problems if somebody transmits a header in a format that cannot be represented by your data structure.
Oftentimes what a framework will do is store the headers in the dictionary, and then provide getters and setters to access “friendly” parsed versions of commonly used data (but only if it parses correctly).