← Blog

What is a server, anyway?

#web

Related post: “What we talk about when we talk about server”

We web developers have quite a twisted relationship with the server. We love it, we hate it, we avoid it, we embrace it. But what is a server, anyway?

A server is not a machine, virtual or physical. While hardware can be dedicated to running servers, and there are machines tailor-made for this purpose, they are not servers themselves.

A server is also not a single computer process or program. There are many processes running various services, but an individual process or program is not the server itself.

A server is a concept, an abstraction, a role within a formal relationship. A server exists only in relation to a client. A server responds to its client’s requests, but not just any requests—only those as specified by its contract, its interface.

We might even say that what really, concretely exists are requests and responses traversing the network. What makes something a client or a server depends on which side of this back-and-forth it sits. In other words, what we technically have is a computer process running a program designed to receive requests and serve corresponding responses over the network.

But language is a funny thing, and we short-circuit this, calling the machine, the process, or the program running on that side of the network a server.