Я хочу додати користувацькі заголовки http до програми Ruby on Rails, яка зараз розміщена на Heroku.
Відповіді:
Використання:
response.headers['HEADER NAME'] = 'HEADER VALUE'
або в певному методі, або в методі before_filter вашого контролера додатків, залежно від того, чи потрібно це додавати до конкретного або до всіх ваших відповідей.
Як зазначив @BrentMatzelle в коментарях, для Rails 5 :
response.set_header('HEADER NAME', 'HEADER VALUE')
after_action
.
У напрямках 4 встановіть заголовки відповідей у файлі application.rb або відповідних файлах середовища. Як тільки ви це зробите, ви можете замінити значення заголовка скрізь, де вам потрібно в контролері. Для отримання детальної інформації зверніться до цієї URL-адреси .
У Rails 3 або вище просто
headers['Header-Name'] = 'header value'
працює в контролерах. Це навіть рекомендований спосіб; згідно з документацією ,
Response - це в основному деталь реалізації фреймворку Ruby on Rails, і вона ніколи не повинна використовуватися безпосередньо в контролерах.
ActionController::Base
Натомість контролери повинні використовувати методи, визначені в . Наприклад, якщо ви хочете встановити тип вмісту відповіді HTTP MIME, тоді використовуйтеActionController::Base#headers
замістьResponse#headers
.
На рейках 4 працює наступне:
class API::V1::BaseController
after_action :set_version_header
protected
def set_version_header
response.headers['X-ComanyName-Api-Version'] = 'V1'
end
end
Якщо ваші заголовки статичні, наприклад, ваш власний заголовок сервера, ви можете просто оновити 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 тощо.