Thanks for being specific and providing an example. By better documenting how it works, I feel that this is not an issue. Implementations are free to provide validation to headers as they are added, but that should be specifically called out in the spec.

Go also provides header values as strings or arrays for their HTTP messages. I don't think this is a new concept or an implementation detail. However, I am curious why you think __toString is an implementation detail.