跳至内容 跳至搜索

Action Dispatch RequestId

使唯一的请求 ID 可在 action_dispatch.request_id 环境变量中访问(该变量随后可通过 ActionDispatch::Request#request_id 或别名 ActionDispatch::Request#uuid 访问),并通过 X-Request-Id 标头将相同的 ID 发送给客户端。

唯一请求 ID 基于请求中的 X-Request-Id 标头(通常由防火墙、负载均衡器或 Web 服务器生成),或者,如果此标头不可用,则生成一个随机 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