Як додати власний заголовок http?


77

Я хочу додати користувацькі заголовки http до програми Ruby on Rails, яка зараз розміщена на Heroku.

Відповіді:


127

Використання:

response.headers['HEADER NAME'] = 'HEADER VALUE'

або в певному методі, або в методі before_filter вашого контролера додатків, залежно від того, чи потрібно це додавати до конкретного або до всіх ваших відповідей.

ОНОВЛЕННЯ для Rails 5 - 24 лютого 2018 року

Як зазначив @BrentMatzelle в коментарях, для Rails 5 :

response.set_header('HEADER NAME', 'HEADER VALUE')

4
Переконайтеся, що значення, яке ви встановили, є рядком, інакше pow дасть вам дивні помилки
Avishai

Щоб додати це до всіх дій у контролері, використовуйте a after_action.
Hendrik

22

У рейках 5 працює наступне рішення (в методах дії)

response.set_header("Header-Name", "Header value")

Довідково: edgeapi


9

У напрямках 4 встановіть заголовки відповідей у ​​файлі application.rb або відповідних файлах середовища. Як тільки ви це зробите, ви можете замінити значення заголовка скрізь, де вам потрібно в контролері. Для отримання детальної інформації зверніться до цієї URL-адреси .


9

У Rails 3 або вище просто

headers['Header-Name'] = 'header value'

працює в контролерах. Це навіть рекомендований спосіб; згідно з документацією ,

Response - це в основному деталь реалізації фреймворку Ruby on Rails, і вона ніколи не повинна використовуватися безпосередньо в контролерах. ActionController::BaseНатомість контролери повинні використовувати методи, визначені в . Наприклад, якщо ви хочете встановити тип вмісту відповіді HTTP MIME, тоді використовуйте ActionController::Base#headersзамість Response#headers.

І це все ще вірно в Rails 6.0 .


3

На рейках 4 працює наступне:

class API::V1::BaseController 
  after_action :set_version_header

  protected
    def set_version_header
        response.headers['X-ComanyName-Api-Version'] = 'V1'
    end
end

0

Якщо ваші заголовки статичні, наприклад, ваш власний заголовок сервера, ви можете просто оновити config.action_dispatch.default_headers. Наступний приклад встановлює власний заголовок сервера ; додайте його до свого config/application.rbабо config/environments/...:

config.action_dispatch.default_headers["Server"] = "MyServer/#{config.version}"

(Припускаючи, що ви встановили config.versionраніше)

Докладніше див. У розділі Посібники Rails: Налаштування програм Rails: Налаштування відправки дій :

config.action_dispatch.default_headers - це хеш із заголовками HTTP, які встановлюються за замовчуванням у кожній відповіді.

Це буде меншою роботою кожного запиту, ніж запуск зворотного виклику контролера.

Примітка. Для використання більш ніж одного заголовка merge!не слід видаляти існуючі основні заголовки XSS тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.