diff --git a/src/core/transport/metadata.c b/src/core/transport/metadata.c
index 3fd21a2f5dc6c18fd201f2846d7d8b2c3b0a84d4..61638764a61bbc335e288513b52afaa5c514963d 100644
--- a/src/core/transport/metadata.c
+++ b/src/core/transport/metadata.c
@@ -703,7 +703,7 @@ int grpc_mdstr_is_legal_header(grpc_mdstr *s) {
 
 int grpc_mdstr_is_legal_nonbin_header(grpc_mdstr *s) {
   static const gpr_uint8 legal_header_bits[256 / 8] = {
-      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+      0x00, 0x00, 0x00, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
       0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
   return conforms_to(s, legal_header_bits);
diff --git a/tools/codegen/core/gen_legal_metadata_characters.c b/tools/codegen/core/gen_legal_metadata_characters.c
index 5c290f2923229eecd31154ebca623c3cc3cf4947..0fbc545d8d16c8acde0e76f2ce62c8269fab25cf 100644
--- a/tools/codegen/core/gen_legal_metadata_characters.c
+++ b/tools/codegen/core/gen_legal_metadata_characters.c
@@ -66,7 +66,10 @@ int main(void) {
   dump();
 
   clear();
-  for (i = 32; i <= 126; i++) legal(i);
+  for (i = 32; i <= 126; i++) {
+    if (i == ',') continue;
+    legal(i);
+  }
   dump();
 
   return 0;