跳到內文 跳到搜尋

處理動作 RequestId

針對環境變數 action_dispatch.request_id 提供唯一的請求 ID(接著可透過 ActionDispatch::Request#request_id 或別名 ActionDispatch::Request#uuid 存取),並透過 X-Request-Id 標頭將唯一的 ID 傳送給客戶端。

唯一的請求 ID 不是基於請求中的 X-Request-Id 標頭(通常由防火牆、負載平衡器或網路伺服器產生),就是一個隨機 uuid(如果未提供此標頭)。如果從外部世界接受標頭,我們會將字元數消毒為最多 255 字元、且僅限於字母數字與破折號。

唯一的請求 ID 可用於追蹤請求端對端,並且通常會成為堆疊中多個區段的記錄檔一部分。

方法
C
N

類別公開方法

new(app, header:)

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

# 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