Sinatra没有通过重定向传递标题

时间:2010-06-01 14:28:30

标签: 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
      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 个答案:

答案 0 :(得分:2)

这是故意的。 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