module Turbolinks::XHRHeaders

Intercepts calls to _compute_redirect_to_location (used by redirect_to) for two purposes.

  1. Corrects the behavior of redirect_to with the :back option by using the X-XHR-Referer

request header instead of the standard Referer request header.

  1. Stores the return value (the redirect target url) to persist through to the redirect

request, where it will be used to set the X-XHR-Redirected-To response header. The Turbolinks script will detect the header and use replaceState to reflect the redirected url.

Private Instance Methods

_compute_redirect_to_location_with_xhr_referer(options) click to toggle source
# File lib/turbolinks/xhr_headers.rb, line 19
def _compute_redirect_to_location_with_xhr_referer(options)
  store_for_turbolinks begin
    if options == :back && request.headers["X-XHR-Referer"]
      _compute_redirect_to_location_without_xhr_referer(request.headers["X-XHR-Referer"])
    else
      _compute_redirect_to_location_without_xhr_referer(options)
    end
  end
end
set_xhr_redirected_to() click to toggle source
# File lib/turbolinks/xhr_headers.rb, line 34
def set_xhr_redirected_to
  if session[:_turbolinks_redirect_to]
    response.headers['X-XHR-Redirected-To'] = session.delete :_turbolinks_redirect_to
  end
end