2

エンドポイントが呼び出されると、同じ Sinatra プロキシ上の別のエンドポイントにリダイレクトするシンプルな Sinatra プロキシがあります。

ヘッダーを使用してリクエストを行うと、リクエストが最初のエンドポイントでリダイレクトされるときに、プロキシがこのヘッダーを 2 番目のエンドポイントに渡さないようです。これは私のコードです:

    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

どんなヒントでも大歓迎です。

ありがとう

4

1 に答える 1

2

それは意図的にです。redirectHTTP リダイレクトをトリガーすると、新しいリクエストが起動されます。また、値の受け渡しは、 ではなく のenv変更によって行われます。envresponse

主な質問は、ヘッダーとはどういう意味ですか? 要求ヘッダーまたは応答ヘッダー? あなたの例から、リクエストヘッダーを意味していると思います。したがってresponse['username'] = usernamerequest.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
于 2010-06-06T17:01:34.337 に答える