CARLOS rastrillo docs

🤖 clientip

amadan.net/rastrillo/rastrillo/clientip

The address a request came from, when it reached your app through proxies. Use it for anything keyed on the visitor's address, such as a per-IP rate limit or a log line.

From reads X-Forwarded-For from the right. Each proxy adds the address it received the request from to the end of the header, so only the last elements were written by proxies you run. Everything to their left is whatever the client sent. Trust that, and one client can look like a new visitor on every request.

From

func From(r *http.Request, hops int) string

hops is how many proxies you run in front of the app. From returns the element that many places from the end. On CARLOS, pass 1: the edge adds the visitor's address as the last element.

With hops of 0, the header is ignored and From returns the connection's address. Use 0 when nothing is in front of the app.

If the header is missing, or has fewer elements than hops, From returns the connection's address too. That request did not come through your proxies, and the client does not get to say otherwise.

Never set hops higher than the number of proxies really there. One too many and From trusts an address the client wrote.

ParseHops

const DefaultHops = 1

func ParseHops(raw string) (int, error)

ParseHops reads a hop count from configuration, such as an environment variable. Empty gives DefaultHops, which is 1. Anything that is not a whole number of zero or more also gives DefaultHops, with an error for you to log.

Read this page as markdown — exact, unstyled, and cheap for an agent to fetch.