A very important part of an application is routing. Server-side routing is one of the oldest things around. The client requests something through a URL and the server answers back with the requested resource. It might return a static asset as is, or execute some complex logic, gathering resources from external sources and generating the final data for the client to show. The way of doing this may greatly differ between technologies, but all web frameworks have a form of server-side routing.
Client-side routing is newer. When single-page applications (SPAs) started to win space in web development, client-side routers appeared to increase the navigation speed, improving the experience of the end user. The code to navigate to the next views was already there in the client, ready to be run. This is not free though; there is some overhead in the first load if you send a lot of data and also wait for that first render to finish. This can hurt the performance...