Before learning Rest / Soap / GraphQL, You Need to Understand HTTP !

HTTP stands for Hypertext Transfer Protocol, initially created for web browser/server communication, it has many more use cases today.

In the last few years i’ve observed many junior developers having a hard time creating and maintaining Rest and Soap services, after a short discussion with them, i often realised that the main reason was the lack of knowledge of the HTTP protocol.

So in this article, i’ll briefly explain the fundamentals of the HTTP protocol.

Image for post
Image for post

The HTTP protocol is a request/response protocol based on the client/server based architecture where web browsers, robots and search engines, etc. act like HTTP clients, and the Web server acts as a server.


Image for post
Image for post
Example of an HTTP Request

1–1 Request-Line

An HTTP request must at least have a Request-Line:


1-1-1 Request-Methods:

Most used HTTP Methods :

  • GET : this method means retrieve whatever information (in the form of an
    entity) is identified by the Request-URI.
  • POST : the actual function performed by the POST method is determined by the server, in most cases it’s used to post a message as a new subordinate of the resource identified by the Request-URI.
  • PUT : this method requests that the enclosed entity be stored under the
    supplied Request-URI. If the Request-URI refers to an already
    existing resource, the enclosed entity SHOULD be considered as a
    modified version of the one residing on the origin server. If the
    Request-URI does not point to an existing resource, and that URI is
    capable of being defined as a new resource.
  • DELETE : this method requests that the origin server delete the resource
    identified by the Request-URI.
  • OPTIONS : this method represents a request for information about the
    communication options available on the request/response chain
    identified by the Request-URI, such as pre-flight requests for Cross Origin Ressource Sharing (CORS).

Other HTTP Methods exists like : HEAD, CONNECT, PATCH… we will not cover them in this article because they are rarely used in API design.

1–1–2: Request-URI (Path):

The Request-URI is a Uniform Resource Identifier and identifies the resource on the server upon which to apply the request.

1-2 Request-Headers:

The Request-header fields allow the client to pass additional information about the request, and about the client itself, to the server. these information are exploited by the server in different ways such as Authentication, Routing, Analytics and so on.


1–3 Request-Body:

The Request-Body of an HTTP Request is used to carry the entity-body associated with the request, A Request-Body MUST NOT be included in a request if the specification of the request method does not allow sending an entity-body in requests.


Image for post
Image for post
Example of an HTTP Response

2–1 Status-Line 🆗

The first line of a Response message is the Status-Line, consisting of the protocol version followed by a numeric status code and its associated textual phrase, E.g :

You can find the exhaustive list of status codes in the official RFC of HTTP.

2–2 Response-Headers:

The Response-Header fields allow the server to pass additional information about the response which cannot be placed in the Status-Line. These header fields give information about the server and about further access to the resource identified by the Request-URI, E.g:

2–3 Response-Body:

The Response-Body is N bytes of content with N specified in the Content-Length header, some of the most used types of content are (Image/jpeg, Text/plain, Text/html …).

Now that we understand the basics of HTTP, let’s see now how to establish a TCP connexion to an HTTP server and send/receive some bytes to/from it using Python.

Running this Python code will render the following output :

Image for post
Image for post

A Web browser works exactly the same as the previous python program :

  • It starts by establishing a TCP connexion to the HTTP server.
  • Then it sends well formatted HTTP-Request.
  • The server responds with a well formatted HTTP-Response.
  • The web browser parses the HTTP-Response and displays it.

References :

Lead Software Engineer working across multiple technologies and frameworks. Always willing to challenge my problem solving skills.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store