refactor(proxy): improve header forwarding with blacklist approach

Change from whitelist to blacklist mode for request header forwarding.
Only skip headers that will be overridden (auth, host, content-length).
This preserves client's original headers and improves compatibility.
This commit is contained in:
YoVinchen
2025-12-31 10:21:57 +08:00
parent 43ccbdad47
commit fa4e7bcd82
2 changed files with 17 additions and 19 deletions
+5 -17
View File
@@ -487,29 +487,17 @@ impl RequestForwarder {
// 构建请求
let mut request = self.client.post(&url);
// 只透传必要的 Headers(白名单模式
let allowed_headers = [
"accept",
"user-agent",
"x-request-id",
"x-stainless-arch",
"x-stainless-lang",
"x-stainless-os",
"x-stainless-package-version",
"x-stainless-runtime",
"x-stainless-runtime-version",
];
// 请求头黑名单:仅跳过会被覆盖或可能失效的字段(认证、Host、长度
let skip_headers = ["authorization", "x-api-key", "host", "content-length"];
for (key, value) in headers {
let key_str = key.as_str().to_lowercase();
if allowed_headers.contains(&key_str.as_str()) {
request = request.header(key, value);
if skip_headers.contains(&key_str.as_str()) {
continue;
}
request = request.header(key, value);
}
// 确保 Content-Type 是 json
request = request.header("Content-Type", "application/json");
// 使用适配器添加认证头
if let Some(auth) = adapter.extract_auth(provider) {
log::debug!(
+12 -2
View File
@@ -954,12 +954,22 @@ mod tests {
model_id, display_name, input_cost_per_million, output_cost_per_million,
cache_read_cost_per_million, cache_creation_cost_per_million
) VALUES (?, ?, ?, ?, ?, ?)",
params!["claude-haiku-4.5", "Claude Haiku 4.5", "1.0", "2.0", "0.0", "0.0"],
params![
"claude-haiku-4.5",
"Claude Haiku 4.5",
"1.0",
"2.0",
"0.0",
"0.0"
],
)?;
// 测试精确匹配(seed_model_pricing 已预置 claude-sonnet-4-5-20250929
let result = find_model_pricing_row(&conn, "claude-sonnet-4-5-20250929")?;
assert!(result.is_some(), "应该能精确匹配 claude-sonnet-4-5-20250929");
assert!(
result.is_some(),
"应该能精确匹配 claude-sonnet-4-5-20250929"
);
// 清洗:去除前缀和冒号后缀
let result = find_model_pricing_row(&conn, "anthropic/claude-haiku-4.5")?;