Как правильно получить заголовки запроса на Rails 5? - PullRequest
0 голосов
/ 07 декабря 2018

Из того, что я искал, я понял, что есть (или было) несколько способов получения заголовка запроса с использованием Rails.Например, если запрос имеет заголовок X-AppEngine-Country, для его получения я бы использовал:

request.headers["HTTP_X_APPENGINE_COUNTRY"]

или

request.headers["X_APPENGINE_COUNTRY"]

или

request.headers["X-AppEngine-Country"]

Это немного смущает меня, и я не мог найти правильный путь.Какой это?

1 Ответ

0 голосов
/ 07 декабря 2018

Если вы посмотрите на реализацию заголовка запроса Rails, вы увидите, что имя заголовка сначала «очищается», передавая его объекту Rack::Request::Env - https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/headers.rb#L122

    # Converts an HTTP header name to an environment variable name if it is
    # not contained within the headers hash.
    def env_name(key)
      key = key.to_s
      if HTTP_HEADER.match?(key)
        key = key.upcase.tr("-", "_")
        key = "HTTP_" + key unless CGI_VARIABLES.include?(key)
      end
      key
    end

Railsбудет upcase имя заголовка для вас, а также преобразует - в _ и добавит HTTP_ при необходимости.

Принимая это во внимание:

request.headers["HTTP_X_APPENGINE_COUNTRY"] - я бы избежал этого, так как Rails будет использовать HTTP_.

request.headers["X_APPENGINE_COUNTRY"] - Я не вижу ничего плохогос использованием этого.

request.headers["X-AppEngine-Country"] - Это тот, который я выбрал бы, так как имя заголовка в оригинальном формате.

Приветствия!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...