The HTTP parser does not need a complete request string to start or continue the processing. This allows the parser to pause the processing and wait for more data in the network stream. It also allows the parser to abort as soon as something invalid comes in
the stream. This saves you some CPU cycles, compared to a parser that needs a complete request before starting to parse. The parser do not convert the incoming byte stream to a string, but parses the stream bytes, which speeds up the parsing.
All these headers below are valid according to the rfc (i.e. whitespaces and new lines are allowed when specifying header name/values):
myheader : header value
newHeader : value
on multiple lines
And the parser can of course handle all of those.