From ec4d5597b9c218a2cf9991b87f506e7653733dd7 Mon Sep 17 00:00:00 2001 From: Mrsandeep27 Date: Mon, 20 Apr 2026 16:07:07 +0530 Subject: [PATCH] fix(py-sdk): lowercase gRPC metadata header keys (#165) grpcio's metadata validator enforces HTTP/2's rule that metadata keys must be ASCII-lowercase; uppercase keys are rejected client-side with `validate_metadata: INTERNAL: Illegal header key`, so calls never reach the server. - Rename HEADER_CALLER_ID to "online-feature-store-caller-id" - Rename HEADER_CALLER_TOKEN to "online-feature-store-auth-token" Server compatibility: the Go gRPC server reads metadata via `metadata.FromIncomingContext` + `md.Get(key)`, which is case-insensitive, so incoming lowercase keys match the existing Go SDK constants (which are also normalized to lowercase by grpc-go on the wire). Fixes #165 --- py-sdk/grpc_feature_client/grpc_feature_client/client.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/py-sdk/grpc_feature_client/grpc_feature_client/client.py b/py-sdk/grpc_feature_client/grpc_feature_client/client.py index 93724a69..049f1b14 100644 --- a/py-sdk/grpc_feature_client/grpc_feature_client/client.py +++ b/py-sdk/grpc_feature_client/grpc_feature_client/client.py @@ -19,9 +19,11 @@ # Set up logging logger = logging.getLogger(__name__) -# gRPC authentication headers (from Go SDK) -HEADER_CALLER_ID = "ONLINE-FEATURE-STORE-CALLER-ID" -HEADER_CALLER_TOKEN = "ONLINE-FEATURE-STORE-AUTH-TOKEN" +# gRPC authentication headers (must be lowercase; grpcio validates metadata +# keys against HTTP/2's ASCII-lowercase requirement and rejects uppercase +# keys with `Illegal header key` before the call ever leaves the client). +HEADER_CALLER_ID = "online-feature-store-caller-id" +HEADER_CALLER_TOKEN = "online-feature-store-auth-token" try: import grpc