Redirect Sinatra未通过带有重定向的标头
我有一个简单的Sinatra代理,当调用端点时,它将重定向到同一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
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方法。干杯