feat: add explicit content-length header to non-streamed item list response

Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-08-29 11:57:22 -03:00
parent 59e1ecd181
commit 809a1e6e2c

View File

@@ -35,7 +35,7 @@ use crate::modes::server::common::{AppState, ApiResponse, ItemInfo, TagsQuery, L
pub async fn handle_list_items(
State(state): State<AppState>,
Query(params): Query<ListItemsQuery>,
) -> Result<Json<ApiResponse<Vec<ItemInfo>>>, StatusCode> {
) -> Result<Response, StatusCode> {
let tags: Vec<String> = params
.tags
.as_ref()
@@ -93,7 +93,23 @@ pub async fn handle_list_items(
error: None,
};
Ok(Json(response))
// Serialize to JSON to get the exact length
let json_response = match serde_json::to_vec(&response) {
Ok(data) => data,
Err(e) => {
warn!("Failed to serialize response: {}", e);
return Err(StatusCode::INTERNAL_SERVER_ERROR);
}
};
// Build response with explicit Content-Length
let response = Response::builder()
.header(header::CONTENT_TYPE, "application/json")
.header(header::CONTENT_LENGTH, json_response.len().to_string())
.body(axum::body::Body::from(json_response))
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
Ok(response)
}
/// Handle as_meta=true response by returning JSON with metadata and content