diff --git a/src/core/transport/metadata.c b/src/core/transport/metadata.c
index df05d1a302fb65708dbbfa9b097455ccbeb4ecd3..02b24028205c42396e6f34bd576aa580b91084ef 100644
--- a/src/core/transport/metadata.c
+++ b/src/core/transport/metadata.c
@@ -703,7 +703,7 @@ static int conforms_to(grpc_mdstr *s, const gpr_uint8 *legal_bits) {
 
 int grpc_mdstr_is_legal_header(grpc_mdstr *s) {
   static const gpr_uint8 legal_header_bits[256 / 8] = {
-      0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xff, 0x03, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xff, 0x03, 0x00, 0x00, 0x00,
       0x80, 0xfe, 0xff, 0xff, 0x07, 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 c6658f46c66a65697102b9fd5db172139e692841..3c9e1c7619b1469cdc6680bd4e11d4aeb55148bb 100644
--- a/tools/codegen/core/gen_legal_metadata_characters.c
+++ b/tools/codegen/core/gen_legal_metadata_characters.c
@@ -68,6 +68,7 @@ int main(void) {
   for (i = '0'; i <= '9'; i++) legal(i);
   legal('-');
   legal('_');
+  legal('.');
   dump();
 
   clear();