Ответ 1
Заголовки HTTP доступны в среде стойки, переданной вашему приложению:
HTTP_
Переменные: Переменные, соответствующие заголовкам HTTP-запроса, предоставленным клиентом (т.е. переменные, имена которых начинаются с HTTP_). Наличие или отсутствие этих переменных должно соответствовать присутствию или отсутствию соответствующего HTTP-заголовка в запросе.
Итак, заголовки HTTP имеют префикс "HTTP_" и добавляются в хэш.
Вот небольшая программа, которая извлекает и отображает их:
require 'rack'
app = Proc.new do |env|
headers = env.select {|k,v| k.start_with? 'HTTP_'}
.collect {|key, val| [key.sub(/^HTTP_/, ''), val]}
.collect {|key, val| "#{key}: #{val}<br>"}
.sort
[200, {'Content-Type' => 'text/html'}, headers]
end
Rack::Server.start :app => app, :Port => 8080
Когда я запускаю это, помимо заголовков HTTP, как показано в Chrome или Firefox, есть "VERSION: HTPP/1.1" (т.е. запись с ключом "HTTP_VERSION" и добавляется значение "HTTP/1.1" к env hash).