What is HTTP?

HTTP (Hypertext Transfer Protocol)

HTTP (Hypertext Transfer Protocol) is a set of rules and procedures (a protocol) governing the actions of creating, reading, updating, and deleting World Wide Web hypermedia resources through exchanges of messages between two separate processes (instances of computer programs) where the process that initially sends the request message is called the client, and the process which sends the response message is called the server.

HTTP within Internet Protocol Suite

HTTP is part of the application layer (a software layer) within the Internet protocol suite (commonly referred to as TCP/IP).

Generally, TCP/IP includes the following layers:

  • the application layer - process-to-process communication, currently includes HTTP, FTP, SSH, and SMTP,

  • the transport layer - host-to-host (device-to-device) communication, governed by the rules of the Transmission Control Protocol (TCP) in HTTP/2 and User Datagram Protocol (UDP) in HTTP/3,

  • the internet layer - network-to-network communication, internetworking, and

  • the link layer - link-to-link communication over a single network.

HTTP Origins

TCP/IP, of which HTTP is part, was incepted in the late 1960s by Defense Advanced Research Projects Agency (DARPA) which created Advanced Research Projects Agency Network (ARPANET). In the 1980s versions of TCP/IP were adopted by IBM, AT&T, and other companies. In 1989 the University of California, Berkeley placed the TCP/IP code developed for BSD Unix in the public domain.

The development of HTTP itself was initiated by Sir Tim Berners-Lee at CERN in 1989 with version 0.9. It coincided with the development of HTML i.e. HyperText Markup Language.

The first HTTP server went live in 1990.

HTTP Versions

HTTP/0.9 (HTTP version 0.9), which was the first HTTP version, had only one method GET which could only retrieve HTML documents. HTTP/0.9 is currently considered obsolete.

HTTP/1 was finalized in 1996. It added HEAD and POST methods. In HTTP/1 a separate connection had to be made for each request and response message exchange. HTTP/1 is currently considered obsolete.

HTTP/1.1 was released in 1997. It added the PUT, DELETE, CONNECT, OPTIONS, and TRACE methods. In HTTP/1.1 a single connection can be reused for multiple request and response message exchanges. HTTP/1.1 is still used currently.

HTTP/2 was introduced in 2015. It is based to some extent on Google's SPDY binary protocol and enhances the speed of message exchange however generally retains compatibility with HTTP/1.1. Although HTTP/2 does not require encryption, the major browsers do for HTTP/2 message exchanges, making its usage with HTTP/2 de facto compulsory. HTTP/2 is currently the prevailing standard of HTTP.

HTTP/3 is currently under development. HTTP/3 generally uses the same message methods, status codes, and fields as HTTP/2. The main reason behind HTTP/3 development is increasing the speed of message exchange. It's being attained through employing a new transport layer (host-to-host) protocol called QUIC (based on the User Datagram Protocol) instead of the Transmission Control Protocol (TCP).

HTTPS (Hypertext Transfer Protocol Secure) is an extension to HTTP providing secure communication between processes using Transport Layer Security (TLS) or, previously, Secure Sockets Layer (SSL).

HTTP Statelessness

HTTP is stateless which means that no previous state is ever needed for an execution of a given request and response messages exchange.

The above does not mean that no data can be retained between message exchanges. Indeed, it can. The data can be retained between message exchanges in the form of HTTP cookies which are sent in responses by the server, stored by the client, and appended to the client's subsequent requests.

Connections & Ports

Before a request and response messages exchange is performed the client establishes a connection with the server.

Commonly used port for non-encrypted connections is 80, and for encrypted connections 443.