为什么非流式可以使用JVM修改proxy而流式不可以
简单回答
因为 流式模式(Flux<String>
)使用了 Streaming 接口,底层用的是 WebClient + Netty + stream: true
,它一定要:
-
支持长连接、
-
支持代理转发 streaming、
-
并且必须你代理能正确转发 chunked 或 SSE 流式响应;
而非流式模式(String
返回)是一个普通的 POST 请求(stream: false
),你的 JVM -Dhttps.proxyHost
参数在某些 JVM 实现中对普通同步阻塞 HTTP 请求可能会生效,所以你侥幸成功了。
但:
更详细技术解释如下:
1. String chat(String message)
:
-
默认走的是
stream: false
; -
HTTP 请求是标准的 POST 请求,响应是一个完整 JSON;
-
有可能走的是默认
HttpClient
,JDK 对-Dhttps.proxyHost
有兼容; -
成功是因为它在某些语言链实现中使用了兼容传统代理参数的客户端,例如
HttpURLConnection
;
2. Flux<String> chat(String message)
:
-
走的是
stream: true
; -
会启用 HTTP Chunked 或 Server-Sent Events(SSE);
-
底层强制使用
WebClient + Reactor Netty
来处理响应流; -
而 WebClient 不支持 JVM 代理设置,必须手动
.proxy()
;
模式 | 是否流式 | 使用客户端 | 是否支持 JVM 代理设置 | 成功可能性 |
---|---|---|---|---|
String |
否 | HttpClient or fallback |
✅ 有时能用 | ✅ 有时成功 |
Flux<String> |
是 | WebClient + Netty |
❌ 必须手动 .proxy() |
❌ 报错 |
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容