Làm cách nào để bạn thêm tiêu đề http tùy chỉnh?


77

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:


127

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.

CẬP NHẬT cho Rails 5 - ngày 24 tháng 2 năm 2018

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')

4
Hãy chắc chắn rằng giá trị mà bạn thiết lập là một chuỗi, nếu không pow sẽ cung cấp cho bạn các lỗi lạ
Avishai

Để thêm điều này vào tất cả các hành động trong bộ điều khiển, hãy sử dụng a after_action.
Hendrik

22

Trong rails 5, giải pháp sau hoạt động (trong phương pháp hành động)

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

Tham khảo: edgeapi


9

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.


9

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í 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::BaseThay 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ụng ActionController::Base#headersthay vì Response#headers.

điều này vẫn đúng trong Rails 6.0 .


3

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

0

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.rbhoặc config/environments/...:

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

(Giả sử bạn đã đặt config.versiontrướ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ó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.