HTTP/1.1 is officially described by 6 RFCs:
- RFC 7230, HTTP/1.1: Message Syntax Routing
- RFC 7231, HTTP/1.1:
Semantics and Content
- RFC 7232, HTTP/1.1: Conditional Requests
- RFC 7233, HTTP/1.1: Range Request
- RFC 7234, HTTP/1.1: Caching
- RFC 7235, HTTP/1.1: Authentication
However, errata exist for most of these.
These RFCs are also current being revised again by the HTTP Working Group of the IETF and are expected to be formalised as RFCs “soon”, which will presumably “obsolete” those 6.
And of course there is the HTTP/2 RFC but will ignore that since you specifically talk about HTTP/1.1, and both HTTP/1.1 and HTTP/2 share the same semantics pretty much. On that note HTTP/3 is also due to be published “soon”.
Additionally there are many, many RFCs that extend HTTP with additional headers and the like.
And as another answer has indicated, many servers do not follow the spec precisely due to bugs or even because the implementor specifically decided not to. HTTP is a rich, large and complex protocol and the web has always been quite forgiving compared to some areas of computing where a missing or incorrect semi-colon can stop the whole program. There is even a well-known maxim called Postel’s Law that states “be conservative in what you do, be liberal in what you accept from others.” so many implementations accept messages that a strict reading of the spec would not allow. Though on that subject it should be noted that the IETF have another draft RFC arguing that Postel’s Law (aka “The Robustness Principal”) is harmful.