Web applications were wasting huge amounts of resources. No explicit relationship between methods, header fields and status codes in an HTTP message. Relationship must be defined implicitly Methods to be performed on the resource A priori agreement of semantics. Can't be extended dynamically Headers carry information about the parties involved, the transaction, the message body or the resource Unknown header fields must be ignored without affecting the outcome of the transaction Status Codes are the results returned by the server Status codes are somewhat easier to extend, as unknown status codes must be treated as the x00 code of that class.
Most features defined by header fields have a request part and a response part.
HTTP is inherently a stateless protocol Request-response pairs are independent but not necessarily idempotent. Involves the end-user and hence concerns about privacy etc.