#8363·mitmproxy

fix(server-replay): 在重放耗尽后应用额外请求策略

作者: coygeek创建于 2026年8月10日更新于 2026年8月10日

□ 总结

目标储存库:`mitmproxy/mitmproxy'。

当服务器重放配置没有“ 服务器 replay reuse” 时, 消耗最后的可重放响应会空出重放地图 。 之后的每一个请求都会绕过"server replay extra",包括一个不再有可回放响应的相同请求,并被允许到达上游服务器.

这与该选项的有文件记载的合同相矛盾:在回放时没有找到可回放的响应的‘server replay extra'控制请求. 它还使`404 ' 等数字政策在最后保存的响应被消耗之后不再静静地适用。

□ 复制步骤

以下仅使用回回转源和mitmproxy的显式代理模式.

  1. 将此保存为`起源地.py':
从 http.server 导入 BaseHTTP RequestHandler, ThreadingHTTPServer 中
从 pathlib 导入路径


类 Handler( BaseHTTP RequestHandler) :
def do GET( 自定义):
以 Path ("ground.log"). open ("a",编码="utf-8") 为日志 :
log.write( self. path + “\n” )
b “原生反应\n”
自定义( 200)
自动. send header ("Content- Length", str (len( body)))
自定义.end headers ()
自我.wfile.write( body) (中文(简体) ).

def 日志  message( 自,格式, *args) :
通过


线索 HTTPServer ( ("127. 0.0. 1", 18080), Hander. serve  forever ()).
  1. 从一个终端开始源头:

嘘 : > 来源.log python3 来源.py


3. 在第二个终端,记录一个请求并停止录音代理:

嘘
轻轻地弹出
- 听 - 主持人 127.0.0.1 o
- 听着 18081 \
- 保存- 流文件 1. mitm
-- flow-detail 0( D)
记录 pid=$!
睡觉 1

卷起-正极-正极-正极 http://127.0.0.1:18081\
http://127.0.0.1:18080/记录

杀死“ $record  pid”
等待“ $record  pid ”
wc - l 来源.log

来源计为"一".

  1. 启动服务器重放 404 策略,懒惰上游连接,默认不可重用重放行为:

嘘 轻轻地弹出

  • 听 - 主持人 127.0.0.1 o -听着 18082 \ \
  • 服务器重放1.mitm
    --server- replay-tra 404 \
  • 设置连接 战略=懒惰?
  • 不服务器 - 重播 - 新鲜? -- flow-detail 0( D) 重放 pid=$( $) ! 睡觉 1

5. 发送记录的请求一次,并检查原产地:

嘘
卷起 -- noproxy " --output / dev/null -- write-out '{http code}\n}'\
- 代理 http://127.0.0.1:18082\
http://127.0.0.1:18080/记录
wc - l 来源.log

答复是重播的 " 200 " ,来源计数仍然是 " 1 " 。

  1. 第二次发出同一请求:

嘘 卷起 -- noproxy " --output / dev/null -- write-out '{http code}\n}'\

杀死“ $ replay pid ” 等待“$replay pid”


□ 预期行为

第二回放请求不再有可回放的响应,所以
. . . . . . .

内容来源: mitmproxy/mitmproxy