diff --git a/src/core/lib/channel/http_server_filter.c b/src/core/lib/channel/http_server_filter.c
index 3f992977c086d0955be79605218da52e22cb27d4..bb185351a8e2b61238ca649853e4db4cff9209b9 100644
--- a/src/core/lib/channel/http_server_filter.c
+++ b/src/core/lib/channel/http_server_filter.c
@@ -198,14 +198,17 @@ static grpc_error *server_filter_incoming_metadata(grpc_exec_ctx *exec_ctx,
                                  GRPC_ERROR_STR_KEY, ":path"));
   }
 
-  if (b->idx.named.host != NULL) {
+  if (b->idx.named.host != NULL && b->idx.named.authority == NULL) {
+    grpc_linked_mdelem *el = b->idx.named.host;
+    grpc_mdelem md = GRPC_MDELEM_REF(el->md);
+    grpc_metadata_batch_remove(exec_ctx, b, el);
     add_error(
         error_name, &error,
-        grpc_metadata_batch_substitute(
-            exec_ctx, b, b->idx.named.host,
-            grpc_mdelem_from_slices(
-                exec_ctx, GRPC_MDSTR_AUTHORITY,
-                grpc_slice_ref_internal(GRPC_MDVALUE(b->idx.named.host->md)))));
+        grpc_metadata_batch_add_head(
+            exec_ctx, b, el, grpc_mdelem_from_slices(
+                                 exec_ctx, GRPC_MDSTR_AUTHORITY,
+                                 grpc_slice_ref_internal(GRPC_MDVALUE(md)))));
+    GRPC_MDELEM_UNREF(exec_ctx, md);
   }
 
   if (b->idx.named.authority == NULL) {
diff --git a/tools/run_tests/python_utils/start_port_server.py b/tools/run_tests/python_utils/start_port_server.py
index d521aa6a9d940040ee529e373677f37c559d37e9..8ee7080168a5b84fa14c578ee26c68c33dd80422 100644
--- a/tools/run_tests/python_utils/start_port_server.py
+++ b/tools/run_tests/python_utils/start_port_server.py
@@ -36,6 +36,7 @@ import tempfile
 import sys
 import time
 import jobset
+import socket
 
 def start_port_server(port_server_port):
   # check if a compatible port server is running