diff --git a/quiche/http2/adapter/nghttp2_adapter_test.cc b/quiche/http2/adapter/nghttp2_adapter_test.cc
index 99f71b9..f7741de 100644
--- a/quiche/http2/adapter/nghttp2_adapter_test.cc
+++ b/quiche/http2/adapter/nghttp2_adapter_test.cc
@@ -2610,7 +2610,7 @@
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
 
-  const spdy::Http2HeaderBlock block = ToHeaderBlock(ToHeaders(
+  const quiche::HttpHeaderBlock block = ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(1, block);
@@ -2644,7 +2644,7 @@
   auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
 
   const auto kLargeValue = std::string(63 * 1024, 'a');
-  const spdy::Http2HeaderBlock block =
+  const quiche::HttpHeaderBlock block =
       ToHeaderBlock(ToHeaders({{"large-value", kLargeValue}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(1, block);
@@ -2683,7 +2683,7 @@
   TestVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
 
-  const spdy::Http2HeaderBlock block = ToHeaderBlock(ToHeaders(
+  const quiche::HttpHeaderBlock block = ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(0, block);
@@ -2726,7 +2726,7 @@
   const int32_t stream_id =
       adapter->SubmitRequest(headers, nullptr, true, nullptr);
 
-  const spdy::Http2HeaderBlock block = ToHeaderBlock(ToHeaders(
+  const quiche::HttpHeaderBlock block = ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(stream_id, block);
@@ -2793,7 +2793,7 @@
   const int32_t stream_id =
       adapter->SubmitRequest(headers, nullptr, true, nullptr);
 
-  const spdy::Http2HeaderBlock block = ToHeaderBlock(ToHeaders(
+  const quiche::HttpHeaderBlock block = ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(stream_id, block);
@@ -2851,7 +2851,7 @@
   const int32_t stream_id =
       adapter->SubmitRequest(headers, nullptr, true, nullptr);
 
-  const spdy::Http2HeaderBlock block = ToHeaderBlock(
+  const quiche::HttpHeaderBlock block = ToHeaderBlock(
       ToHeaders({{"more-than-one-frame", std::string(20000, 'a')}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(stream_id, block);
diff --git a/quiche/http2/adapter/nghttp2_util.cc b/quiche/http2/adapter/nghttp2_util.cc
index a59f69d..615ad89 100644
--- a/quiche/http2/adapter/nghttp2_util.cc
+++ b/quiche/http2/adapter/nghttp2_util.cc
@@ -91,7 +91,7 @@
 }
 
 std::vector<nghttp2_nv> GetResponseNghttp2Nvs(
-    const spdy::Http2HeaderBlock& headers, absl::string_view response_code) {
+    const quiche::HttpHeaderBlock& headers, absl::string_view response_code) {
   // Allocate enough for all headers and also the :status pseudoheader.
   const int num_headers = headers.size();
   std::vector<nghttp2_nv> nghttp2_nvs;
diff --git a/quiche/http2/adapter/nghttp2_util.h b/quiche/http2/adapter/nghttp2_util.h
index 423ad1b..5e08e8c 100644
--- a/quiche/http2/adapter/nghttp2_util.h
+++ b/quiche/http2/adapter/nghttp2_util.h
@@ -12,7 +12,7 @@
 #include "quiche/http2/adapter/http2_protocol.h"
 #include "quiche/http2/adapter/http2_visitor_interface.h"
 #include "quiche/http2/adapter/nghttp2.h"
-#include "quiche/spdy/core/http2_header_block.h"
+#include "quiche/common/http/http_header_block.h"
 
 namespace http2 {
 namespace adapter {
@@ -49,7 +49,7 @@
 // the :status pseudoheader first based on the given |response_code|. The
 // |response_code| is passed in separately from |headers| for lifetime reasons.
 std::vector<nghttp2_nv> GetResponseNghttp2Nvs(
-    const spdy::Http2HeaderBlock& headers, absl::string_view response_code);
+    const quiche::HttpHeaderBlock& headers, absl::string_view response_code);
 
 // Returns the HTTP/2 error code corresponding to the raw wire value, as defined
 // in RFC 7540 Section 7. Unrecognized error codes are treated as INTERNAL_ERROR
diff --git a/quiche/http2/adapter/oghttp2_adapter_metadata_test.cc b/quiche/http2/adapter/oghttp2_adapter_metadata_test.cc
index a90b0da..db399f7 100644
--- a/quiche/http2/adapter/oghttp2_adapter_metadata_test.cc
+++ b/quiche/http2/adapter/oghttp2_adapter_metadata_test.cc
@@ -12,9 +12,9 @@
 #include "quiche/http2/adapter/oghttp2_util.h"
 #include "quiche/http2/adapter/test_frame_sequence.h"
 #include "quiche/http2/adapter/test_utils.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_expect_bug.h"
 #include "quiche/common/platform/api/quiche_test.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace http2 {
 namespace adapter {
@@ -392,7 +392,7 @@
   EXPECT_FALSE(adapter->want_write());
   EXPECT_EQ(0, adapter->GetSendWindowSize());
 
-  const spdy::Http2HeaderBlock block = ToHeaderBlock(ToHeaders(
+  const quiche::HttpHeaderBlock block = ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(stream_id1, block);
@@ -477,7 +477,7 @@
   options.perspective = Perspective::kServer;
   auto adapter = OgHttp2Adapter::Create(visitor, options);
 
-  const spdy::Http2HeaderBlock block = ToHeaderBlock(ToHeaders(
+  const quiche::HttpHeaderBlock block = ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(1, block);
@@ -512,7 +512,7 @@
   auto adapter = OgHttp2Adapter::Create(visitor, options);
 
   const auto kLargeValue = std::string(63 * 1024, 'a');
-  const spdy::Http2HeaderBlock block =
+  const quiche::HttpHeaderBlock block =
       ToHeaderBlock(ToHeaders({{"large-value", kLargeValue}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(1, block);
@@ -553,7 +553,7 @@
   options.perspective = Perspective::kServer;
   auto adapter = OgHttp2Adapter::Create(visitor, options);
 
-  const spdy::Http2HeaderBlock block = ToHeaderBlock(ToHeaders(
+  const quiche::HttpHeaderBlock block = ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(0, block);
@@ -639,7 +639,7 @@
   visitor.Clear();
   EXPECT_FALSE(adapter->want_write());
 
-  const spdy::Http2HeaderBlock block =
+  const quiche::HttpHeaderBlock block =
       ToHeaderBlock(ToHeaders({{"key", "wild value!"}}));
   if (GetParam()) {
     visitor.AppendMetadataForStream(1, block);
diff --git a/quiche/http2/adapter/oghttp2_adapter_test.cc b/quiche/http2/adapter/oghttp2_adapter_test.cc
index 5b02ba7..70e3192 100644
--- a/quiche/http2/adapter/oghttp2_adapter_test.cc
+++ b/quiche/http2/adapter/oghttp2_adapter_test.cc
@@ -13,9 +13,9 @@
 #include "quiche/http2/adapter/oghttp2_util.h"
 #include "quiche/http2/adapter/test_frame_sequence.h"
 #include "quiche/http2/adapter/test_utils.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_expect_bug.h"
 #include "quiche/common/platform/api/quiche_test.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace http2 {
 namespace adapter {
diff --git a/quiche/http2/adapter/oghttp2_session.cc b/quiche/http2/adapter/oghttp2_session.cc
index cc9d3c0..cc80baf 100644
--- a/quiche/http2/adapter/oghttp2_session.cc
+++ b/quiche/http2/adapter/oghttp2_session.cc
@@ -1058,7 +1058,7 @@
   } else {
     // Save trailers so they can be written once data is done.
     state.trailers =
-        std::make_unique<spdy::Http2HeaderBlock>(ToHeaderBlock(trailers));
+        std::make_unique<quiche::HttpHeaderBlock>(ToHeaderBlock(trailers));
     trailers_ready_.insert(stream_id);
   }
   return 0;
@@ -1794,7 +1794,7 @@
 }
 
 void OgHttp2Session::SendHeaders(Http2StreamId stream_id,
-                                 spdy::Http2HeaderBlock headers,
+                                 quiche::HttpHeaderBlock headers,
                                  bool end_stream) {
   auto frame =
       std::make_unique<spdy::SpdyHeadersIR>(stream_id, std::move(headers));
@@ -1803,7 +1803,7 @@
 }
 
 void OgHttp2Session::SendTrailers(Http2StreamId stream_id,
-                                  spdy::Http2HeaderBlock trailers) {
+                                  quiche::HttpHeaderBlock trailers) {
   auto frame =
       std::make_unique<spdy::SpdyHeadersIR>(stream_id, std::move(trailers));
   frame->set_fin(true);
@@ -1853,7 +1853,7 @@
 }
 
 void OgHttp2Session::StartRequest(Http2StreamId stream_id,
-                                  spdy::Http2HeaderBlock headers,
+                                  quiche::HttpHeaderBlock headers,
                                   std::unique_ptr<DataFrameSource> data_source,
                                   void* user_data, bool end_stream) {
   if (received_goaway_) {
diff --git a/quiche/http2/adapter/oghttp2_session.h b/quiche/http2/adapter/oghttp2_session.h
index 5b1357e..2bd4c5f 100644
--- a/quiche/http2/adapter/oghttp2_session.h
+++ b/quiche/http2/adapter/oghttp2_session.h
@@ -23,6 +23,7 @@
 #include "quiche/http2/core/http2_trace_logging.h"
 #include "quiche/http2/core/no_op_headers_handler.h"
 #include "quiche/http2/core/priority_write_scheduler.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_bug_tracker.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/platform/api/quiche_flags.h"
@@ -30,7 +31,6 @@
 #include "quiche/common/quiche_circular_deque.h"
 #include "quiche/common/quiche_linked_hash_map.h"
 #include "quiche/spdy/core/http2_frame_decoder_adapter.h"
-#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_framer.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 
@@ -245,7 +245,7 @@
 
     WindowManager window_manager;
     std::unique_ptr<DataFrameSource> outbound_body;
-    std::unique_ptr<spdy::Http2HeaderBlock> trailers;
+    std::unique_ptr<quiche::HttpHeaderBlock> trailers;
     void* user_data = nullptr;
     int32_t send_window;
     std::optional<HeaderType> received_header_type;
@@ -261,7 +261,7 @@
   using StreamStateMap = absl::flat_hash_map<Http2StreamId, StreamState>;
 
   struct QUICHE_EXPORT PendingStreamState {
-    spdy::Http2HeaderBlock headers;
+    quiche::HttpHeaderBlock headers;
     std::unique_ptr<DataFrameSource> data_source;
     void* user_data = nullptr;
     bool end_stream;
@@ -396,10 +396,10 @@
                          std::unique_ptr<MetadataSource> source);
   void SerializeMetadata(Http2StreamId stream_id);
 
-  void SendHeaders(Http2StreamId stream_id, spdy::Http2HeaderBlock headers,
+  void SendHeaders(Http2StreamId stream_id, quiche::HttpHeaderBlock headers,
                    bool end_stream);
 
-  void SendTrailers(Http2StreamId stream_id, spdy::Http2HeaderBlock trailers);
+  void SendTrailers(Http2StreamId stream_id, quiche::HttpHeaderBlock trailers);
 
   // Encapsulates the RST_STREAM NO_ERROR behavior described in RFC 7540
   // Section 8.1.
@@ -414,7 +414,7 @@
 
   // Creates a stream for `stream_id`, stores the `data_source` and `user_data`
   // in the stream state, and sends the `headers`.
-  void StartRequest(Http2StreamId stream_id, spdy::Http2HeaderBlock headers,
+  void StartRequest(Http2StreamId stream_id, quiche::HttpHeaderBlock headers,
                     std::unique_ptr<DataFrameSource> data_source,
                     void* user_data, bool end_stream);
 
diff --git a/quiche/http2/adapter/oghttp2_util.cc b/quiche/http2/adapter/oghttp2_util.cc
index 26a3fb3..df0aa8d 100644
--- a/quiche/http2/adapter/oghttp2_util.cc
+++ b/quiche/http2/adapter/oghttp2_util.cc
@@ -3,8 +3,8 @@
 namespace http2 {
 namespace adapter {
 
-spdy::Http2HeaderBlock ToHeaderBlock(absl::Span<const Header> headers) {
-  spdy::Http2HeaderBlock block;
+quiche::HttpHeaderBlock ToHeaderBlock(absl::Span<const Header> headers) {
+  quiche::HttpHeaderBlock block;
   for (const Header& header : headers) {
     absl::string_view name = GetStringView(header.first).first;
     absl::string_view value = GetStringView(header.second).first;
diff --git a/quiche/http2/adapter/oghttp2_util.h b/quiche/http2/adapter/oghttp2_util.h
index 0aba100..25ec337 100644
--- a/quiche/http2/adapter/oghttp2_util.h
+++ b/quiche/http2/adapter/oghttp2_util.h
@@ -3,13 +3,13 @@
 
 #include "absl/types/span.h"
 #include "quiche/http2/adapter/http2_protocol.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_export.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace http2 {
 namespace adapter {
 
-QUICHE_EXPORT spdy::Http2HeaderBlock ToHeaderBlock(
+QUICHE_EXPORT quiche::HttpHeaderBlock ToHeaderBlock(
     absl::Span<const Header> headers);
 
 }  // namespace adapter
diff --git a/quiche/http2/adapter/oghttp2_util_test.cc b/quiche/http2/adapter/oghttp2_util_test.cc
index d1a4177..7e747c0 100644
--- a/quiche/http2/adapter/oghttp2_util_test.cc
+++ b/quiche/http2/adapter/oghttp2_util_test.cc
@@ -15,7 +15,7 @@
 using HeaderPair = std::pair<absl::string_view, absl::string_view>;
 
 TEST(ToHeaderBlock, EmptySpan) {
-  spdy::Http2HeaderBlock block = ToHeaderBlock({});
+  quiche::HttpHeaderBlock block = ToHeaderBlock({});
   EXPECT_TRUE(block.empty());
 }
 
@@ -26,7 +26,7 @@
                                          {":scheme", "http"},
                                          {"accept", "text/plain, text/html"}};
   const std::vector<Header> headers = ToHeaders(pairs);
-  spdy::Http2HeaderBlock block = ToHeaderBlock(headers);
+  quiche::HttpHeaderBlock block = ToHeaderBlock(headers);
   EXPECT_THAT(block, testing::ElementsAreArray(pairs));
 }
 
@@ -36,7 +36,7 @@
       {"content-length", "1023"},
       {"x-extra-info", "humblest apologies"}};
   const std::vector<Header> headers = ToHeaders(pairs);
-  spdy::Http2HeaderBlock block = ToHeaderBlock(headers);
+  quiche::HttpHeaderBlock block = ToHeaderBlock(headers);
   EXPECT_THAT(block, testing::ElementsAreArray(pairs));
 }
 
@@ -54,7 +54,7 @@
       {"cookie", "chocolate_chips=yes; raisins=no"},
       {"accept", "text/plain, text/html"}};
   const std::vector<Header> headers = ToHeaders(pairs);
-  spdy::Http2HeaderBlock block = ToHeaderBlock(headers);
+  quiche::HttpHeaderBlock block = ToHeaderBlock(headers);
   EXPECT_THAT(block, testing::ElementsAreArray(expected));
 }
 
@@ -73,7 +73,7 @@
                                            9)},
       {"set-cookie", absl::string_view("chocolate_chips=yes\0raisins=no", 30)}};
   const std::vector<Header> headers = ToHeaders(pairs);
-  spdy::Http2HeaderBlock block = ToHeaderBlock(headers);
+  quiche::HttpHeaderBlock block = ToHeaderBlock(headers);
   EXPECT_THAT(block, testing::ElementsAreArray(expected));
 }
 
diff --git a/quiche/http2/adapter/test_frame_sequence.cc b/quiche/http2/adapter/test_frame_sequence.cc
index 833d17a..a099082 100644
--- a/quiche/http2/adapter/test_frame_sequence.cc
+++ b/quiche/http2/adapter/test_frame_sequence.cc
@@ -107,7 +107,7 @@
 }
 
 TestFrameSequence& TestFrameSequence::Headers(Http2StreamId stream_id,
-                                              spdy::Http2HeaderBlock block,
+                                              quiche::HttpHeaderBlock block,
                                               bool fin, bool add_continuation) {
   if (add_continuation) {
     // The normal intermediate representations don't allow you to represent a
diff --git a/quiche/http2/adapter/test_frame_sequence.h b/quiche/http2/adapter/test_frame_sequence.h
index 93c5536..59a0d7f 100644
--- a/quiche/http2/adapter/test_frame_sequence.h
+++ b/quiche/http2/adapter/test_frame_sequence.h
@@ -7,8 +7,8 @@
 #include <vector>
 
 #include "quiche/http2/adapter/http2_protocol.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_export.h"
-#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 
 namespace http2 {
@@ -48,7 +48,7 @@
       absl::Span<const std::pair<absl::string_view, absl::string_view>> headers,
       bool fin = false, bool add_continuation = false);
   TestFrameSequence& Headers(Http2StreamId stream_id,
-                             spdy::Http2HeaderBlock block, bool fin = false,
+                             quiche::HttpHeaderBlock block, bool fin = false,
                              bool add_continuation = false);
   TestFrameSequence& Headers(Http2StreamId stream_id,
                              absl::Span<const Header> headers, bool fin = false,
diff --git a/quiche/http2/adapter/test_utils.cc b/quiche/http2/adapter/test_utils.cc
index b791443..40e3970 100644
--- a/quiche/http2/adapter/test_utils.cc
+++ b/quiche/http2/adapter/test_utils.cc
@@ -18,7 +18,7 @@
 
 using ConnectionError = Http2VisitorInterface::ConnectionError;
 
-std::string EncodeHeaders(const spdy::Http2HeaderBlock& entries) {
+std::string EncodeHeaders(const quiche::HttpHeaderBlock& entries) {
   spdy::HpackEncoder encoder;
   encoder.DisableCompression();
   return encoder.EncodeHeaderBlock(entries);
@@ -120,7 +120,7 @@
 }
 
 void TestVisitor::AppendMetadataForStream(
-    Http2StreamId stream_id, const spdy::Http2HeaderBlock& payload) {
+    Http2StreamId stream_id, const quiche::HttpHeaderBlock& payload) {
   outbound_metadata_map_.insert({stream_id, EncodeHeaders(payload)});
 }
 
@@ -143,7 +143,7 @@
   return visitor_.SendDataFrame(stream_id_, frame_header, payload_length);
 }
 
-TestMetadataSource::TestMetadataSource(const spdy::Http2HeaderBlock& entries)
+TestMetadataSource::TestMetadataSource(const quiche::HttpHeaderBlock& entries)
     : encoded_entries_(EncodeHeaders(entries)) {
   remaining_ = encoded_entries_;
 }
diff --git a/quiche/http2/adapter/test_utils.h b/quiche/http2/adapter/test_utils.h
index e81fdd4..66eca87 100644
--- a/quiche/http2/adapter/test_utils.h
+++ b/quiche/http2/adapter/test_utils.h
@@ -11,9 +11,9 @@
 #include "quiche/http2/adapter/data_source.h"
 #include "quiche/http2/adapter/http2_protocol.h"
 #include "quiche/http2/adapter/mock_http2_visitor.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/platform/api/quiche_test.h"
-#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 
 namespace http2 {
@@ -76,7 +76,7 @@
 
   // Test methods to manipulate the metadata payload to send for a stream.
   void AppendMetadataForStream(Http2StreamId stream_id,
-                               const spdy::Http2HeaderBlock& payload);
+                               const quiche::HttpHeaderBlock& payload);
 
   const std::string& data() { return data_; }
   void Clear() { data_.clear(); }
@@ -122,7 +122,7 @@
 
 class QUICHE_NO_EXPORT TestMetadataSource : public MetadataSource {
  public:
-  explicit TestMetadataSource(const spdy::Http2HeaderBlock& entries);
+  explicit TestMetadataSource(const quiche::HttpHeaderBlock& entries);
 
   size_t NumFrames(size_t max_frame_size) const override {
     // Round up to the next frame.
diff --git a/quiche/http2/adapter/test_utils_test.cc b/quiche/http2/adapter/test_utils_test.cc
index 8af0fd4..7ff2ede 100644
--- a/quiche/http2/adapter/test_utils_test.cc
+++ b/quiche/http2/adapter/test_utils_test.cc
@@ -46,7 +46,7 @@
   EXPECT_THAT(framer.SerializeFrame(goaway),
               EqualsFrames({{spdy::SpdyFrameType::GOAWAY, std::nullopt}}));
 
-  spdy::Http2HeaderBlock block;
+  quiche::HttpHeaderBlock block;
   block[":method"] = "GET";
   block[":path"] = "/example";
   block[":authority"] = "example.com";
@@ -64,7 +64,7 @@
   spdy::SpdyRstStreamIR rst_stream{7, spdy::ERROR_CODE_REFUSED_STREAM};
   spdy::SpdyGoAwayIR goaway{13, spdy::ERROR_CODE_ENHANCE_YOUR_CALM,
                             "Consider taking some deep breaths."};
-  spdy::Http2HeaderBlock block;
+  quiche::HttpHeaderBlock block;
   block[":method"] = "GET";
   block[":path"] = "/example";
   block[":authority"] = "example.com";
