Синатра не передает заголовок с редиректом - PullRequest
2 голосов
/ 01 июня 2010

У меня есть простой прокси-сервер Sinatra, который при вызове конечной точки перенаправляет на другую конечную точку того же прокси-сервера Sinatra.

Когда я делаю запрос с заголовком, прокси-сервер не передает этот заголовок второй конечной точке, когда запрос перенаправляет в первую. Это мой код:

    get '/first' do 
        # get the header from the request
      username = env['HTTP_USERNAME'] 
        # set the header for the response
      response['username'] = username 
      redirect '/second'
    end

    get '/second' do 
        # This doesn't exist when redirected from /first
    puts env['HTTP_USERNAME']

        # Here is a list of all headers
      env.each_key do |key|
        puts "KEY: #{key}  VALUE: #{env[key]}" unless key.nil?
      end

      "DONE"
    end

Любые советы будут с благодарностью.

Спасибо

1 Ответ

2 голосов
/ 06 июня 2010

Это намеренно. redirect вызывает перенаправление HTTP, новый запрос будет запущен. Кроме того, передача значений env осуществляется путем изменения env, а не response.

Главный вопрос: что вы подразумеваете под заголовком? Заголовок запроса или заголовок ответа? Из вашего примера, я полагаю, вы имеете в виду заголовок запроса, поэтому response['username'] = username должно быть request.env['username'] = username. Затем вы можете заменить redirect '/second' на request.path_info = '/second'; pass, чтобы выполнить какое-то внутреннее перенаправление. Если вы не передадите значение другой промежуточной программе / конечной точке Rack, вы также можете сохранить имя пользователя в переменной экземпляра.

get '/first' do
  request.path_info = '/second'
  pass
end

get '/second' do
  puts request.env['HTTP_USERNAME']
  "DONE"
end
...