Redirect Sinatra未通过带有重定向的标头

Redirect Sinatra未通过带有重定向的标头,redirect,header,sinatra,rack,Redirect,Header,Sinatra,Rack,我有一个简单的Sinatra代理,当调用端点时,它将重定向到同一Sinatra代理上的另一个端点 当我发出带有头的请求时,当请求在第一个端点中重定向时,代理似乎不会将该头传递给第二个端点。这是我的代码: get '/first' do # get the header from the request username = env['HTTP_USERNAME'] # set the header for the response

我有一个简单的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
任何提示都将不胜感激


谢谢你的好意<代码>重定向触发HTTP重定向,将触发新请求。此外,传递
env
值是通过修改
env
完成的,而不是通过修改
response

主要问题是,你所说的标题是什么意思?请求头还是响应头?从您的示例中,我想您指的是请求头,因此
response['username']=username
应该是
request.env['username']=username
。然后可以用
request.path_info='/second'替换
redirect'/second'
;传递
以执行某种内部重定向。如果不将该值传递给另一个机架中间件/端点,还可以将用户名存储在实例变量中

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

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

谢谢康斯坦丁,这正是我想要的。我完全忘了我可以使用pass方法。干杯