The client-server model is the architecture in which one program asks for a service and another provides it. RFC 2616, the HTTP/1.1 specification, frames this firsthand: “The HTTP protocol is a request/response protocol. A client sends a request to the server… over a connection with a server.” The server, in turn, sends back a response.
The RFC defines the two roles precisely. A client is “a program that establishes connections for the purpose of sending requests,” while a server is “an application program that accepts connections in order to service requests by sending back responses.” On the web the client is typically a browser, which RFC 2616 calls a user agent: “the client which initiates a request. These are often browsers, editors, spiders… or other end user tools.”
Crucially, the roles are about behavior, not identity. The specification notes that “any given program may be capable of being both a client and a server; our use of these terms refers only to the role being performed by the program for a particular connection.” A single machine can act as a server for one connection and a client for another.
This request-and-response shape is the foundation of the web. Browsers (clients) request pages and data; web servers and runtimes such as Node.js fulfill those requests. Understanding which side initiates and which side responds is the starting point for nearly all network programming.