Tôi đang tìm cách thêm tiêu đề http tùy chỉnh vào ứng dụng Ruby on Rails hiện được lưu trữ trên Heroku.
Câu trả lời:
Sử dụng:
response.headers['HEADER NAME'] = 'HEADER VALUE'
trong một phương pháp cụ thể hoặc phương thức before_filter của bộ điều khiển ứng dụng của bạn tùy thuộc vào việc bạn cần thêm điều này vào một cụ thể hay cho tất cả các phản hồi của bạn.
Như đã lưu ý bởi @BrentMatzelle trong các nhận xét, đối với Rails 5 :
response.set_header('HEADER NAME', 'HEADER VALUE')
after_action
.
Trong rails 4, đặt tiêu đề phản hồi trong application.rb hoặc các tệp môi trường tương ứng. Sau khi thực hiện xong, bạn có thể ghi đè giá trị tiêu đề ở bất cứ đâu bạn cần trong bộ điều khiển. Tham khảo url này để biết thêm chi tiết.
Trong Rails 3 trở lên, chỉ cần
headers['Header-Name'] = 'header value'
hoạt động trong bộ điều khiển. Đây thậm chí là cách được khuyến khích; theo tài liệu ,
Phản hồi chủ yếu là chi tiết triển khai khung Ruby on Rails và không bao giờ được sử dụng trực tiếp trong bộ điều khiển.
ActionController::Base
Thay vào đó, bộ điều khiển nên sử dụng các phương pháp được định nghĩa trong . Ví dụ: nếu bạn muốn đặt kiểu MIME nội dung của phản hồi HTTP, thì hãy sử dụngActionController::Base#headers
thay vìResponse#headers
.
In rails 4 hoạt động sau:
class API::V1::BaseController
after_action :set_version_header
protected
def set_version_header
response.headers['X-ComanyName-Api-Version'] = 'V1'
end
end
Nếu tiêu đề của bạn là tĩnh, ví dụ như tiêu đề Máy chủ tùy chỉnh của riêng bạn, bạn chỉ cần cập nhật config.action_dispatch.default_headers
. Ví dụ sau đặt tiêu đề Máy chủ tùy chỉnh ; thêm nó vào của bạn config/application.rb
hoặc config/environments/...
:
config.action_dispatch.default_headers["Server"] = "MyServer/#{config.version}"
(Giả sử bạn đã đặt config.version
trước đó)
Để biết thêm, hãy xem Hướng dẫn về Rails: Định cấu hình ứng dụng Rails: Định cấu hình Action Dispatch :
config.action_dispatch.default_headers
là một hàm băm với các tiêu đề HTTP được đặt theo mặc định trong mỗi phản hồi.
Điều này sẽ ít công việc hơn cho mỗi yêu cầu so với việc chạy một lệnh gọi lại của bộ điều khiển.
NB: Sử dụng nhiều hơn một tiêu đề merge!
để không xóa các tiêu đề XSS vv cần thiết hiện có.