diff --git a/quiche/quic/core/http/quic_spdy_stream.cc b/quiche/quic/core/http/quic_spdy_stream.cc
index 40ecc03..c38f6b0 100644
--- a/quiche/quic/core/http/quic_spdy_stream.cc
+++ b/quiche/quic/core/http/quic_spdy_stream.cc
@@ -14,6 +14,7 @@
 #include "absl/strings/numbers.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
+#include "quiche/http2/adapter/header_validator.h"
 #include "quiche/http2/http2_constants.h"
 #include "quiche/quic/core/http/http_constants.h"
 #include "quiche/quic/core/http/http_decoder.h"
@@ -1648,34 +1649,10 @@
 
 namespace {
 
-// Return true if |c| is not allowed in an HTTP/3 wire-encoded header and
-// pseudo-header names according to
-// https://datatracker.ietf.org/doc/html/draft-ietf-quic-http#section-4.1.1 and
-// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-semantics-19#section-5.6.2
-constexpr bool IsInvalidHeaderNameCharacter(unsigned char c) {
-  if (c == '!' || c == '|' || c == '~' || c == '*' || c == '+' || c == '-' ||
-      c == '.' ||
-      // #, $, %, &, '
-      (c >= '#' && c <= '\'') ||
-      // [0-9], :
-      (c >= '0' && c <= ':') ||
-      // ^, _, `, [a-z]
-      (c >= '^' && c <= 'z')) {
-    return false;
-  }
-  return true;
-}
-
-// Return true if `name` is invalid because it contains a disallowed character.
-bool HeaderNameHasInvalidCharacter(absl::string_view name) {
-  const bool colon_invalid =
-      GetQuicReloadableFlag(quic_colon_invalid_in_header_name);
-  if (colon_invalid) {
-    QUICHE_RELOADABLE_FLAG_COUNT(quic_colon_invalid_in_header_name);
-  }
-
+// Return true if `name` only has allowed characters.
+bool IsValidHeaderName(absl::string_view name) {
   if (name.empty()) {
-    return false;
+    return true;
   }
 
   // Remove leading colon of pseudo-headers.
@@ -1684,16 +1661,7 @@
     name.remove_prefix(1);
   }
 
-  if (std::find(name.begin(), name.end(), ':') != name.end()) {
-    // Header name contains colon (other than optional leading colon of
-    // pseudo-headers), which is invalid.
-    QUICHE_CODE_COUNT(quic_colon_in_header_name);
-    if (colon_invalid) {
-      return true;
-    }
-  }
-
-  return std::any_of(name.begin(), name.end(), IsInvalidHeaderNameCharacter);
+  return http2::adapter::HeaderValidator::IsValidHeaderName(name);
 }
 
 }  // namespace
@@ -1712,7 +1680,7 @@
   bool is_response = false;
   for (const std::pair<std::string, std::string>& pair : header_list) {
     const std::string& name = pair.first;
-    if (HeaderNameHasInvalidCharacter(name)) {
+    if (!IsValidHeaderName(name)) {
       invalid_request_details_ =
           absl::StrCat("Invalid character in header name ", name);
       QUIC_DLOG(ERROR) << invalid_request_details_;
diff --git a/quiche/quic/core/http/quic_spdy_stream_test.cc b/quiche/quic/core/http/quic_spdy_stream_test.cc
index 47ffb69..42ca430 100644
--- a/quiche/quic/core/http/quic_spdy_stream_test.cc
+++ b/quiche/quic/core/http/quic_spdy_stream_test.cc
@@ -3421,24 +3421,11 @@
   EXPECT_EQ(0u, bytes_read);
 }
 
-TEST_P(QuicSpdyStreamTest, ColonAllowedInHeaderName) {
-  if (!UsesHttp3()) {
-    return;
-  }
-
-  SetQuicReloadableFlag(quic_colon_invalid_in_header_name, false);
-  Initialize(kShouldProcessData);
-
-  headers_["foo:bar"] = "invalid";
-  EXPECT_TRUE(stream_->ValidateReceivedHeaders(AsHeaderList(headers_)));
-}
-
 TEST_P(QuicSpdyStreamTest, ColonDisallowedInHeaderName) {
   if (!UsesHttp3()) {
     return;
   }
 
-  SetQuicReloadableFlag(quic_colon_invalid_in_header_name, true);
   Initialize(kShouldProcessData);
 
   headers_["foo:bar"] = "invalid";
diff --git a/quiche/quic/core/quic_flags_list.h b/quiche/quic/core/quic_flags_list.h
index d890c10..bc0890b 100644
--- a/quiche/quic/core/quic_flags_list.h
+++ b/quiche/quic/core/quic_flags_list.h
@@ -67,8 +67,6 @@
 QUIC_FLAG(quic_reloadable_flag_quic_disable_server_blackhole_detection, false)
 // If true, disable resumption when receiving NRES connection option.
 QUIC_FLAG(quic_reloadable_flag_quic_enable_disable_resumption, true)
-// If true, disallow colon in received header names (other than leading colon of pseudo-headers).
-QUIC_FLAG(quic_reloadable_flag_quic_colon_invalid_in_header_name, true)
 // If true, discard INITIAL packet if the key has been dropped.
 QUIC_FLAG(quic_reloadable_flag_quic_discard_initial_packet_with_key_dropped, true)
 // If true, dispatcher sends error code QUIC_HANDSHAKE_FAILED_PACKETS_BUFFERED_TOO_LONG when handshake fails due to packets buffered for too long.
