Follow Redirects

The :follow_redirects plugin allows the client to send subsequent requests whenever the response is of the “Redirect” (3XX) variant.

res = HTTPX.get("") #=> 301 response, location ""
res = HTTPX.plugin(:follow_redirects).get("") #=> 200 response from ""


It also allows one to set the maximum number of redirects (default is 3):

http = HTTPX.plugin(:follow_redirects)

# or
http.get("", max_redirects: 42)


By default, insecure redirects (https to http) aren’t followed. If you want to allow them however, you can enable this option:

http = HTTPX.plugin(:follow_redirects)
http.get("https://redirecttohttp", follow_insecure_redirects: true)


(introduced on httpx 1.2.0.)

In case you need to stop the redirect chain based on your rules (such as domain whitelisting), you can use the :redirect_on option:

allow_list = ->(redirect_uri) { ALLOW_LIST.include?( }

http = HTTPX.plugin(:follow_redirects).with(redirect_on: allow_list)


Response redirection will be delayed if the redirect response carries a retry-after header. The delay will be based on its value and some jitter. This is a standard way the server communicates to the client how long to wait before doing the next request.


How can I get the sequence of redirect responses?

You can us event callbacks to collect them:

responses = []
HTTPX.plugin(:follow_redirects).plugin(:callbacks).on_response_completed do |req, res|
  responses << res
end.get("") #=> [301, 200]

Next: Retries