處理動作 RequestId
針對環境變數 action_dispatch.request_id
提供唯一的請求 ID(接著可透過 ActionDispatch::Request#request_id
或別名 ActionDispatch::Request#uuid
存取),並透過 X-Request-Id
標頭將唯一的 ID 傳送給客戶端。
唯一的請求 ID 不是基於請求中的 X-Request-Id
標頭(通常由防火牆、負載平衡器或網路伺服器產生),就是一個隨機 uuid(如果未提供此標頭)。如果從外部世界接受標頭,我們會將字元數消毒為最多 255 字元、且僅限於字母數字與破折號。
唯一的請求 ID 可用於追蹤請求端對端,並且通常會成為堆疊中多個區段的記錄檔一部分。
方法
類別公開方法
new(app, header:) 連結
原始碼:顯示 | 在 GitHub 上
# File actionpack/lib/action_dispatch/middleware/request_id.rb, line 25 def initialize(app, header:) @app = app @header = header @env_header = "HTTP_#{header.upcase.tr("-", "_")}" end
執行個體公開方法
call(env) 連結
原始碼:顯示 | 在 GitHub 上
# File actionpack/lib/action_dispatch/middleware/request_id.rb, line 31 def call(env) req = ActionDispatch::Request.new env req.request_id = make_request_id(req.get_header(@env_header)) @app.call(env).tap { |_status, headers, _body| headers[@header] = req.request_id } end