> For the complete documentation index, see [llms.txt](https://aaronice.gitbook.io/system-design/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aaronice.gitbook.io/system-design/distributed-systems/proxies.md).

# Proxies

Some are excerpts from Grokking System Design

## The Concept

A **proxy** server is an intermediary piece of hardware/software that sits between the client and the back-end server. It **receives requests** from clients and **relays** them to the origin servers.

## Usage

Typically, proxies are used to **filter requests** or **log requests**, or sometimes **transform requests** (by adding/removing headers, encrypting/decrypting, or compression).

Another advantage of a proxy server is that its **cache** can serve a lot of requests.

**Coordinating requests** from multiple servers and can be used to optimize request traffic from a system-wide perspective. e.g. collapse the same (or similar) data access requests into one request and then return the single result to the user; this scheme is called **collapsed forwarding**.
