Rack中间件中应检查HTTP_CE_IDEMPOTENCYKEY还是ce-idempotencykey?
Rails 7中Rack中间件获取幂等性请求头的正确方式
- 明确结论:在Rack中间件的
env哈希里,必须使用HTTP_CE_IDEMPOTENCYKEY来获取请求头ce-idempotencykey。 - 背后的规则:Rack会对所有传入的HTTP请求头做标准化转换:
- 把请求头名称的连字符
-替换成下划线_ - 全部转为大写
- 前缀加上
HTTP_(除了少数特殊头,比如Content-Type会同时存在CONTENT_TYPE和HTTP_CONTENT_TYPE,但自定义头统一遵循这个规则)
- 把请求头名称的连字符
- 示例代码:
class IdempotencyMiddleware def initialize(app) @app = app end def call(env) # 正确提取ce-idempotencykey请求头 idempotency_key = env['HTTP_CE_IDEMPOTENCYKEY'] if idempotency_key.present? # 执行你的幂等性逻辑:比如查询缓存的响应、记录请求状态等 end @app.call(env) end end
- 验证方法:如果不确定键名,可以在中间件里打印所有HTTP相关的env键,确认实际的键名:
puts env.keys.grep(/HTTP_/)
内容的提问来源于stack exchange,提问作者mr_muscle
相关产品推荐
相关产品推荐

