diff --git a/common/quiche_text_utils.h b/common/quiche_text_utils.h
index c99d9e2..ccfcdab 100644
--- a/common/quiche_text_utils.h
+++ b/common/quiche_text_utils.h
@@ -7,16 +7,32 @@
 
 #include <string>
 
+#include "absl/hash/hash.h"
 #include "absl/strings/ascii.h"
 #include "absl/strings/escaping.h"
+#include "absl/strings/match.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
 #include "common/platform/api/quiche_export.h"
 
 namespace quiche {
 
+QUICHE_EXPORT_PRIVATE struct StringPieceCaseHash {
+  size_t operator()(absl::string_view data) const {
+    std::string lower = absl::AsciiStrToLower(data);
+    absl::Hash<absl::string_view> hasher;
+    return hasher(lower);
+  }
+};
+
+QUICHE_EXPORT_PRIVATE struct StringPieceCaseEqual {
+  bool operator()(absl::string_view piece1, absl::string_view piece2) const {
+    return absl::EqualsIgnoreCase(piece1, piece2);
+  }
+};
+
 // Various utilities for manipulating text.
-class QUICHE_EXPORT QuicheTextUtils {
+class QUICHE_EXPORT_PRIVATE QuicheTextUtils {
  public:
   // Returns a new string in which |data| has been converted to lower case.
   static std::string ToLower(absl::string_view data) {
diff --git a/http2/http2_constants.cc b/http2/http2_constants.cc
index 43d89bc..7ffdb04 100644
--- a/http2/http2_constants.cc
+++ b/http2/http2_constants.cc
@@ -150,4 +150,18 @@
   return Http2SettingsParameterToString(static_cast<uint32_t>(v));
 }
 
+// Invalid HTTP/2 header names according to
+// https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2.2.
+// TODO(birenroy): Consider adding "upgrade" to this set.
+constexpr char const* kHttp2InvalidHeaderNames[] = {
+    "connection", "host", "keep-alive", "proxy-connection", "transfer-encoding",
+};
+
+const InvalidHeaderSet& GetInvalidHttp2HeaderSet() {
+  static const auto* invalid_header_set =
+      new InvalidHeaderSet(std::begin(http2::kHttp2InvalidHeaderNames),
+                           std::end(http2::kHttp2InvalidHeaderNames));
+  return *invalid_header_set;
+}
+
 }  // namespace http2
diff --git a/http2/http2_constants.h b/http2/http2_constants.h
index 65e55db..8d8f442 100644
--- a/http2/http2_constants.h
+++ b/http2/http2_constants.h
@@ -14,6 +14,7 @@
 
 #include "http2/platform/api/http2_flags.h"
 #include "common/platform/api/quiche_export.h"
+#include "common/quiche_text_utils.h"
 
 namespace http2 {
 
@@ -234,7 +235,7 @@
 
 // Information about the initial, minimum and maximum value of settings (not
 // applicable to all settings parameters).
-class Http2SettingsInfo {
+QUICHE_EXPORT_PRIVATE class Http2SettingsInfo {
  public:
   // Default value for HEADER_TABLE_SIZE.
   static constexpr uint32_t DefaultHeaderTableSize() { return 4096; }
@@ -259,6 +260,15 @@
   static constexpr uint32_t MaximumMaxFrameSize() { return (1 << 24) - 1; }
 };
 
+// Http3 early fails upper case request headers, but Http2 still needs case
+// insensitive comparison.
+using InvalidHeaderSet =
+    absl::flat_hash_set<absl::string_view, quiche::StringPieceCaseHash,
+                        quiche::StringPieceCaseEqual>;
+
+// Returns all disallowed HTTP/2 headers.
+QUICHE_EXPORT_PRIVATE const InvalidHeaderSet& GetInvalidHttp2HeaderSet();
+
 }  // namespace http2
 
 #endif  // QUICHE_HTTP2_HTTP2_CONSTANTS_H_
diff --git a/spdy/core/spdy_header_block.h b/spdy/core/spdy_header_block.h
index c3c5bad..d409427 100644
--- a/spdy/core/spdy_header_block.h
+++ b/spdy/core/spdy_header_block.h
@@ -14,13 +14,10 @@
 #include <vector>
 
 #include "absl/base/attributes.h"
-#include "absl/hash/hash.h"
-#include "absl/strings/ascii.h"
-#include "absl/strings/match.h"
-#include "absl/strings/string_view.h"
 #include "common/platform/api/quiche_export.h"
 #include "common/platform/api/quiche_logging.h"
 #include "common/quiche_linked_hash_map.h"
+#include "common/quiche_text_utils.h"
 #include "spdy/core/spdy_header_storage.h"
 
 namespace spdy {
@@ -94,24 +91,9 @@
     size_t separator_size_ = 0;
   };
 
-  struct StringPieceCaseHash {
-    size_t operator()(absl::string_view data) const {
-      std::string lower = absl::AsciiStrToLower(data);
-      absl::Hash<absl::string_view> hasher;
-      return hasher(lower);
-    }
-  };
-
-  struct StringPieceCaseEqual {
-    bool operator()(absl::string_view piece1, absl::string_view piece2) const {
-      return absl::EqualsIgnoreCase(piece1, piece2);
-    }
-  };
-
-  typedef quiche::QuicheLinkedHashMap<absl::string_view,
-                                      HeaderValue,
-                                      StringPieceCaseHash,
-                                      StringPieceCaseEqual>
+  typedef quiche::QuicheLinkedHashMap<absl::string_view, HeaderValue,
+                                      quiche::StringPieceCaseHash,
+                                      quiche::StringPieceCaseEqual>
       MapType;
 
  public:
