diff --git a/rust/lancedb/src/remote/client.rs b/rust/lancedb/src/remote/client.rs index 6a44f7f1c..d4a65fe15 100644 --- a/rust/lancedb/src/remote/client.rs +++ b/rust/lancedb/src/remote/client.rs @@ -459,12 +459,14 @@ impl RestfulLanceDbClient { config: &ClientConfig, ) -> Result { let mut headers = HeaderMap::new(); - headers.insert( - HeaderName::from_static("x-api-key"), - HeaderValue::from_str(api_key).map_err(|_| Error::InvalidInput { - message: "non-ascii api key provided".to_string(), - })?, - ); + if !api_key.is_empty() { + headers.insert( + HeaderName::from_static("x-api-key"), + HeaderValue::from_str(api_key).map_err(|_| Error::InvalidInput { + message: "non-ascii api key provided".to_string(), + })?, + ); + } if region == "local" { let host = format!("{}.local.api.lancedb.com", db_name); headers.insert( @@ -1005,6 +1007,33 @@ mod tests { assert!(!config_tls.assert_hostname); } + #[test] + fn test_default_headers_skip_empty_api_key() { + let headers = RestfulLanceDbClient::::default_headers( + "", + "us-east-1", + "db-name", + false, + &RemoteOptions::default(), + None, + &ClientConfig::default(), + ) + .unwrap(); + assert!(!headers.contains_key("x-api-key")); + + let headers = RestfulLanceDbClient::::default_headers( + "api-key", + "us-east-1", + "db-name", + false, + &RemoteOptions::default(), + None, + &ClientConfig::default(), + ) + .unwrap(); + assert_eq!(headers.get("x-api-key").unwrap(), "api-key"); + } + // Test implementation of HeaderProvider #[derive(Debug, Clone)] struct TestHeaderProvider {