Node's built-in http module can create a web server without a framework.
An HTTP request contains a method, URL, headers, and possibly a body. The response contains a status code, headers, and response body.
Understanding this layer helps you understand Express and other frameworks.
Deep dive
Request and response lifecycle
The server receives a request, examines its method and URL, performs application logic, sets response headers and status, and sends the response body.
Real-world considerations
Production servers also need routing, validation, authentication, timeouts, logging, error handling, and graceful shutdown. Frameworks such as Express help organize these concerns.