Migrates all users of spdy::Http2HeaderBlock to quiche::HttpHeaderBlock.

The former is merely an alias for the latter, so this is not a functional change.

Tested:
    Tests have not finished; the CL author decided to mail

Protected by refactoring, no functional change, not protected.

PiperOrigin-RevId: 652878769
diff --git a/quiche/quic/tools/connect_server_backend.cc b/quiche/quic/tools/connect_server_backend.cc
index ba17bea..c0a0771 100644
--- a/quiche/quic/tools/connect_server_backend.cc
+++ b/quiche/quic/tools/connect_server_backend.cc
@@ -15,9 +15,9 @@
 #include "quiche/quic/tools/connect_tunnel.h"
 #include "quiche/quic/tools/connect_udp_tunnel.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_bug_tracker.h"
 #include "quiche/common/platform/api/quiche_logging.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace quic {
 
@@ -25,7 +25,7 @@
 
 void SendErrorResponse(QuicSimpleServerBackend::RequestHandler* request_handler,
                        absl::string_view error_code) {
-  spdy::Http2HeaderBlock headers;
+  quiche::HttpHeaderBlock headers;
   headers[":status"] = error_code;
   QuicBackendResponse response;
   response.set_headers(std::move(headers));
@@ -69,7 +69,7 @@
 }
 
 void ConnectServerBackend::FetchResponseFromBackend(
-    const spdy::Http2HeaderBlock& request_headers,
+    const quiche::HttpHeaderBlock& request_headers,
     const std::string& request_body, RequestHandler* request_handler) {
   // Not a CONNECT request, so send to `non_connect_backend_`.
   non_connect_backend_->FetchResponseFromBackend(request_headers, request_body,
@@ -77,7 +77,7 @@
 }
 
 void ConnectServerBackend::HandleConnectHeaders(
-    const spdy::Http2HeaderBlock& request_headers,
+    const quiche::HttpHeaderBlock& request_headers,
     RequestHandler* request_handler) {
   QUICHE_DCHECK(request_headers.contains(":method") &&
                 request_headers.find(":method")->second == "CONNECT");
diff --git a/quiche/quic/tools/connect_server_backend.h b/quiche/quic/tools/connect_server_backend.h
index 4aa8967..9eda5ed 100644
--- a/quiche/quic/tools/connect_server_backend.h
+++ b/quiche/quic/tools/connect_server_backend.h
@@ -42,10 +42,10 @@
   bool InitializeBackend(const std::string& backend_url) override;
   bool IsBackendInitialized() const override;
   void SetSocketFactory(SocketFactory* socket_factory) override;
-  void FetchResponseFromBackend(const spdy::Http2HeaderBlock& request_headers,
+  void FetchResponseFromBackend(const quiche::HttpHeaderBlock& request_headers,
                                 const std::string& request_body,
                                 RequestHandler* request_handler) override;
-  void HandleConnectHeaders(const spdy::Http2HeaderBlock& request_headers,
+  void HandleConnectHeaders(const quiche::HttpHeaderBlock& request_headers,
                             RequestHandler* request_handler) override;
   void HandleConnectData(absl::string_view data, bool data_complete,
                          RequestHandler* request_handler) override;
diff --git a/quiche/quic/tools/connect_tunnel.cc b/quiche/quic/tools/connect_tunnel.cc
index 22f6c3b..11f2eff 100644
--- a/quiche/quic/tools/connect_tunnel.cc
+++ b/quiche/quic/tools/connect_tunnel.cc
@@ -23,9 +23,9 @@
 #include "quiche/quic/tools/quic_backend_response.h"
 #include "quiche/quic/tools/quic_name_lookup.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/platform/api/quiche_mem_slice.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace quic {
 
@@ -35,7 +35,7 @@
 constexpr size_t kReadSize = 4 * 1024;
 
 std::optional<QuicServerId> ValidateHeadersAndGetAuthority(
-    const spdy::Http2HeaderBlock& request_headers) {
+    const quiche::HttpHeaderBlock& request_headers) {
   QUICHE_DCHECK(request_headers.contains(":method"));
   QUICHE_DCHECK(request_headers.find(":method")->second == "CONNECT");
   QUICHE_DCHECK(!request_headers.contains(":protocol"));
@@ -108,7 +108,7 @@
   QUICHE_DCHECK(!receive_started_);
 }
 
-void ConnectTunnel::OpenTunnel(const spdy::Http2HeaderBlock& request_headers) {
+void ConnectTunnel::OpenTunnel(const quiche::HttpHeaderBlock& request_headers) {
   QUICHE_DCHECK(!IsConnectedToDestination());
 
   std::optional<QuicServerId> authority =
@@ -266,7 +266,7 @@
   QUICHE_DCHECK(IsConnectedToDestination());
   QUICHE_DCHECK(client_stream_request_handler_);
 
-  spdy::Http2HeaderBlock response_headers;
+  quiche::HttpHeaderBlock response_headers;
   response_headers[":status"] = "200";
 
   QuicBackendResponse response;
diff --git a/quiche/quic/tools/connect_tunnel.h b/quiche/quic/tools/connect_tunnel.h
index 259f125..ecde8b7 100644
--- a/quiche/quic/tools/connect_tunnel.h
+++ b/quiche/quic/tools/connect_tunnel.h
@@ -19,8 +19,8 @@
 #include "quiche/quic/core/quic_server_id.h"
 #include "quiche/quic/core/socket_factory.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_mem_slice.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace quic {
 
@@ -41,7 +41,7 @@
   // appropriate success/error response to the request stream. `request_headers`
   // must represent headers from a CONNECT request, that is ":method"="CONNECT"
   // and no ":protocol".
-  void OpenTunnel(const spdy::Http2HeaderBlock& request_headers);
+  void OpenTunnel(const quiche::HttpHeaderBlock& request_headers);
 
   // Returns true iff the connection to the destination server is currently open
   bool IsConnectedToDestination() const;
diff --git a/quiche/quic/tools/connect_tunnel_test.cc b/quiche/quic/tools/connect_tunnel_test.cc
index 9387502..eca60a7 100644
--- a/quiche/quic/tools/connect_tunnel_test.cc
+++ b/quiche/quic/tools/connect_tunnel_test.cc
@@ -24,9 +24,9 @@
 #include "quiche/quic/test_tools/quic_test_utils.h"
 #include "quiche/quic/tools/quic_backend_response.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_mem_slice.h"
 #include "quiche/common/platform/api/quiche_test.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace quic::test {
 namespace {
@@ -140,7 +140,7 @@
     tunnel_.ReceiveComplete(absl::CancelledError());
   }));
 
-  spdy::Http2HeaderBlock expected_response_headers;
+  quiche::HttpHeaderBlock expected_response_headers;
   expected_response_headers[":status"] = "200";
   QuicBackendResponse expected_response;
   expected_response.set_headers(std::move(expected_response_headers));
@@ -154,7 +154,7 @@
                         Property(&QuicBackendResponse::trailers, IsEmpty()),
                         Property(&QuicBackendResponse::body, IsEmpty()))));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":authority"] =
       absl::StrCat(kAcceptableDestination, ":", kAcceptablePort);
@@ -172,7 +172,7 @@
     tunnel_.ReceiveComplete(absl::CancelledError());
   }));
 
-  spdy::Http2HeaderBlock expected_response_headers;
+  quiche::HttpHeaderBlock expected_response_headers;
   expected_response_headers[":status"] = "200";
   QuicBackendResponse expected_response;
   expected_response.set_headers(std::move(expected_response_headers));
@@ -186,7 +186,7 @@
                         Property(&QuicBackendResponse::trailers, IsEmpty()),
                         Property(&QuicBackendResponse::body, IsEmpty()))));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":authority"] =
       absl::StrCat(TestLoopback4().ToString(), ":", kAcceptablePort);
@@ -204,7 +204,7 @@
     tunnel_.ReceiveComplete(absl::CancelledError());
   }));
 
-  spdy::Http2HeaderBlock expected_response_headers;
+  quiche::HttpHeaderBlock expected_response_headers;
   expected_response_headers[":status"] = "200";
   QuicBackendResponse expected_response;
   expected_response.set_headers(std::move(expected_response_headers));
@@ -218,7 +218,7 @@
                         Property(&QuicBackendResponse::trailers, IsEmpty()),
                         Property(&QuicBackendResponse::body, IsEmpty()))));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":authority"] =
       absl::StrCat("[", TestLoopback6().ToString(), "]:", kAcceptablePort);
@@ -235,7 +235,7 @@
                   &QuicResetStreamError::ietf_application_code,
                   static_cast<uint64_t>(QuicHttp3ErrorCode::MESSAGE_ERROR))));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   // No ":authority" header.
 
@@ -251,7 +251,7 @@
           &QuicResetStreamError::ietf_application_code,
           static_cast<uint64_t>(QuicHttp3ErrorCode::REQUEST_REJECTED))));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":authority"] = "unacceptable.test:100";
 
@@ -273,7 +273,7 @@
 
   EXPECT_CALL(request_handler_, SendStreamData(kData, /*close_stream=*/false));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":authority"] =
       absl::StrCat(kAcceptableDestination, ":", kAcceptablePort);
@@ -299,7 +299,7 @@
 
   EXPECT_CALL(request_handler_, OnResponseBackendComplete(_));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":authority"] =
       absl::StrCat(kAcceptableDestination, ":", kAcceptablePort);
@@ -317,7 +317,7 @@
   EXPECT_CALL(request_handler_, OnResponseBackendComplete(_));
   EXPECT_CALL(request_handler_, SendStreamData("", /*close_stream=*/true));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":authority"] =
       absl::StrCat(kAcceptableDestination, ":", kAcceptablePort);
@@ -343,7 +343,7 @@
                   &QuicResetStreamError::ietf_application_code,
                   static_cast<uint64_t>(QuicHttp3ErrorCode::CONNECT_ERROR))));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":authority"] =
       absl::StrCat(kAcceptableDestination, ":", kAcceptablePort);
diff --git a/quiche/quic/tools/connect_udp_tunnel.cc b/quiche/quic/tools/connect_udp_tunnel.cc
index a4d215c..85d0760 100644
--- a/quiche/quic/tools/connect_udp_tunnel.cc
+++ b/quiche/quic/tools/connect_udp_tunnel.cc
@@ -26,13 +26,13 @@
 #include "quiche/quic/tools/quic_backend_response.h"
 #include "quiche/quic/tools/quic_name_lookup.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/masque/connect_udp_datagram_payload.h"
 #include "quiche/common/platform/api/quiche_googleurl.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/platform/api/quiche_mem_slice.h"
 #include "quiche/common/platform/api/quiche_url_utils.h"
 #include "quiche/common/structured_headers.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace quic {
 
@@ -113,7 +113,7 @@
 
 // Validate header expectations from RFC 9298, section 3.4.
 std::optional<QuicServerId> ValidateHeadersAndGetTarget(
-    const spdy::Http2HeaderBlock& request_headers) {
+    const quiche::HttpHeaderBlock& request_headers) {
   QUICHE_DCHECK(request_headers.contains(":method"));
   QUICHE_DCHECK(request_headers.find(":method")->second == "CONNECT");
   QUICHE_DCHECK(request_headers.contains(":protocol"));
@@ -185,7 +185,7 @@
 }
 
 void ConnectUdpTunnel::OpenTunnel(
-    const spdy::Http2HeaderBlock& request_headers) {
+    const quiche::HttpHeaderBlock& request_headers) {
   QUICHE_DCHECK(!IsTunnelOpenToTarget());
 
   std::optional<QuicServerId> target =
@@ -345,7 +345,7 @@
   QUICHE_DCHECK(IsTunnelOpenToTarget());
   QUICHE_DCHECK(client_stream_request_handler_);
 
-  spdy::Http2HeaderBlock response_headers;
+  quiche::HttpHeaderBlock response_headers;
   response_headers[":status"] = "200";
 
   std::optional<std::string> capsule_protocol_value =
@@ -380,7 +380,7 @@
   QUICHE_DCHECK(status_num < 200 || status_num >= 300);
 #endif  // !NDEBUG
 
-  spdy::Http2HeaderBlock headers;
+  quiche::HttpHeaderBlock headers;
   headers[":status"] = status;
 
   structured_headers::Item proxy_status_item(server_label_);
diff --git a/quiche/quic/tools/connect_udp_tunnel.h b/quiche/quic/tools/connect_udp_tunnel.h
index 1e800a7..71e13dc 100644
--- a/quiche/quic/tools/connect_udp_tunnel.h
+++ b/quiche/quic/tools/connect_udp_tunnel.h
@@ -21,8 +21,8 @@
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/core/socket_factory.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_mem_slice.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace quic {
 
@@ -46,7 +46,7 @@
   // success/error response to the request stream. `request_headers` must
   // represent headers from a CONNECT-UDP request, that is ":method"="CONNECT"
   // and ":protocol"="connect-udp".
-  void OpenTunnel(const spdy::Http2HeaderBlock& request_headers);
+  void OpenTunnel(const quiche::HttpHeaderBlock& request_headers);
 
   // Returns true iff the tunnel to the target server is currently open
   bool IsTunnelOpenToTarget() const;
diff --git a/quiche/quic/tools/connect_udp_tunnel_test.cc b/quiche/quic/tools/connect_udp_tunnel_test.cc
index 45cb2ff..5a2faf2 100644
--- a/quiche/quic/tools/connect_udp_tunnel_test.cc
+++ b/quiche/quic/tools/connect_udp_tunnel_test.cc
@@ -173,7 +173,7 @@
                 Property(&QuicBackendResponse::trailers, IsEmpty()),
                 Property(&QuicBackendResponse::body, IsEmpty()))));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":protocol"] = "connect-udp";
   request_headers[":authority"] = "proxy.test";
@@ -205,7 +205,7 @@
                 Property(&QuicBackendResponse::trailers, IsEmpty()),
                 Property(&QuicBackendResponse::body, IsEmpty()))));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":protocol"] = "connect-udp";
   request_headers[":authority"] = "proxy.test";
@@ -245,7 +245,7 @@
        {"target_port", absl::StrCat(kAcceptablePort)}},
       &path));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":protocol"] = "connect-udp";
   request_headers[":authority"] = "proxy.test";
@@ -264,7 +264,7 @@
                   &QuicResetStreamError::ietf_application_code,
                   static_cast<uint64_t>(QuicHttp3ErrorCode::MESSAGE_ERROR))));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":protocol"] = "connect-udp";
   request_headers[":authority"] = "proxy.test";
@@ -288,7 +288,7 @@
                                     HasSubstr("destination_ip_prohibited")))),
                   Property(&QuicBackendResponse::trailers, IsEmpty()))));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":protocol"] = "connect-udp";
   request_headers[":authority"] = "proxy.test";
@@ -317,7 +317,7 @@
           quiche::ConnectUdpDatagramUdpPacketPayload(kData).Serialize()))
       .WillOnce(Return(MESSAGE_STATUS_SUCCESS));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":protocol"] = "connect-udp";
   request_headers[":authority"] = "proxy.test";
@@ -346,7 +346,7 @@
 
   EXPECT_CALL(request_handler_, OnResponseBackendComplete(_));
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   request_headers[":method"] = "CONNECT";
   request_headers[":protocol"] = "connect-udp";
   request_headers[":authority"] = "proxy.test";
diff --git a/quiche/quic/tools/quic_backend_response.h b/quiche/quic/tools/quic_backend_response.h
index 6223e48..5564a6d 100644
--- a/quiche/quic/tools/quic_backend_response.h
+++ b/quiche/quic/tools/quic_backend_response.h
@@ -7,7 +7,7 @@
 
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/quic_time.h"
-#include "quiche/spdy/core/http2_header_block.h"
+#include "quiche/common/http/http_header_block.h"
 
 namespace quic {
 
@@ -35,16 +35,16 @@
 
   ~QuicBackendResponse();
 
-  const std::vector<spdy::Http2HeaderBlock>& early_hints() const {
+  const std::vector<quiche::HttpHeaderBlock>& early_hints() const {
     return early_hints_;
   }
   SpecialResponseType response_type() const { return response_type_; }
-  const spdy::Http2HeaderBlock& headers() const { return headers_; }
-  const spdy::Http2HeaderBlock& trailers() const { return trailers_; }
+  const quiche::HttpHeaderBlock& headers() const { return headers_; }
+  const quiche::HttpHeaderBlock& trailers() const { return trailers_; }
   const absl::string_view body() const { return absl::string_view(body_); }
 
-  void AddEarlyHints(const spdy::Http2HeaderBlock& headers) {
-    spdy::Http2HeaderBlock hints = headers.Clone();
+  void AddEarlyHints(const quiche::HttpHeaderBlock& headers) {
+    quiche::HttpHeaderBlock hints = headers.Clone();
     hints[":status"] = "103";
     early_hints_.push_back(std::move(hints));
   }
@@ -53,10 +53,10 @@
     response_type_ = response_type;
   }
 
-  void set_headers(spdy::Http2HeaderBlock headers) {
+  void set_headers(quiche::HttpHeaderBlock headers) {
     headers_ = std::move(headers);
   }
-  void set_trailers(spdy::Http2HeaderBlock trailers) {
+  void set_trailers(quiche::HttpHeaderBlock trailers) {
     trailers_ = std::move(trailers);
   }
   void set_body(absl::string_view body) {
@@ -69,10 +69,10 @@
   QuicTime::Delta delay() const { return delay_; }
 
  private:
-  std::vector<spdy::Http2HeaderBlock> early_hints_;
+  std::vector<quiche::HttpHeaderBlock> early_hints_;
   SpecialResponseType response_type_;
-  spdy::Http2HeaderBlock headers_;
-  spdy::Http2HeaderBlock trailers_;
+  quiche::HttpHeaderBlock headers_;
+  quiche::HttpHeaderBlock trailers_;
   std::string body_;
   QuicTime::Delta delay_;
 };
diff --git a/quiche/quic/tools/quic_client_interop_test_bin.cc b/quiche/quic/tools/quic_client_interop_test_bin.cc
index 4cb07e4..17b51f5 100644
--- a/quiche/quic/tools/quic_client_interop_test_bin.cc
+++ b/quiche/quic/tools/quic_client_interop_test_bin.cc
@@ -22,9 +22,9 @@
 #include "quiche/quic/tools/quic_default_client.h"
 #include "quiche/quic/tools/quic_name_lookup.h"
 #include "quiche/quic/tools/quic_url.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_command_line_flags.h"
 #include "quiche/common/platform/api/quiche_system_event_loop.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 DEFINE_QUICHE_COMMAND_LINE_FLAG(std::string, host, "",
                                 "The IP or hostname to connect to.");
@@ -121,11 +121,11 @@
 
   // Constructs a Http2HeaderBlock containing the pseudo-headers needed to make
   // a GET request to "/" on the hostname |authority|.
-  spdy::Http2HeaderBlock ConstructHeaderBlock(const std::string& authority);
+  quiche::HttpHeaderBlock ConstructHeaderBlock(const std::string& authority);
 
   // Sends an HTTP request represented by |header_block| using |client|.
   void SendRequest(QuicDefaultClient* client,
-                   const spdy::Http2HeaderBlock& header_block);
+                   const quiche::HttpHeaderBlock& header_block);
 
   void OnConnectionCloseFrame(const QuicConnectionCloseFrame& frame) override {
     switch (frame.close_type) {
@@ -175,7 +175,7 @@
 
   bool zero_rtt_attempt = !client->session()->OneRttKeysAvailable();
 
-  spdy::Http2HeaderBlock header_block = ConstructHeaderBlock(authority);
+  quiche::HttpHeaderBlock header_block = ConstructHeaderBlock(authority);
   SendRequest(client, header_block);
 
   if (!client->session()->OneRttKeysAvailable()) {
@@ -264,7 +264,7 @@
     InsertFeature(Feature::kQuantum);
   }
 
-  spdy::Http2HeaderBlock header_block = ConstructHeaderBlock(authority);
+  quiche::HttpHeaderBlock header_block = ConstructHeaderBlock(authority);
   SendRequest(client.get(), header_block);
 
   if (!client->connected()) {
@@ -332,10 +332,10 @@
   AttemptResumption(client.get(), authority);
 }
 
-spdy::Http2HeaderBlock QuicClientInteropRunner::ConstructHeaderBlock(
+quiche::HttpHeaderBlock QuicClientInteropRunner::ConstructHeaderBlock(
     const std::string& authority) {
   // Construct and send a request.
-  spdy::Http2HeaderBlock header_block;
+  quiche::HttpHeaderBlock header_block;
   header_block[":method"] = "GET";
   header_block[":scheme"] = "https";
   header_block[":authority"] = authority;
@@ -344,7 +344,7 @@
 }
 
 void QuicClientInteropRunner::SendRequest(
-    QuicDefaultClient* client, const spdy::Http2HeaderBlock& header_block) {
+    QuicDefaultClient* client, const quiche::HttpHeaderBlock& header_block) {
   client->set_store_response(true);
   client->SendRequestAndWaitForResponse(header_block, "", /*fin=*/true);
 
diff --git a/quiche/quic/tools/quic_memory_cache_backend.cc b/quiche/quic/tools/quic_memory_cache_backend.cc
index 5a3e168..2993384 100644
--- a/quiche/quic/tools/quic_memory_cache_backend.cc
+++ b/quiche/quic/tools/quic_memory_cache_backend.cc
@@ -21,7 +21,7 @@
 #include "quiche/common/platform/api/quiche_file_utils.h"
 #include "quiche/common/quiche_text_utils.h"
 
-using spdy::Http2HeaderBlock;
+using quiche::HttpHeaderBlock;
 using spdy::kV3LowestPriority;
 
 namespace quic {
@@ -159,7 +159,7 @@
                                                absl::string_view path,
                                                int response_code,
                                                absl::string_view body) {
-  Http2HeaderBlock response_headers;
+  HttpHeaderBlock response_headers;
   response_headers[":status"] = absl::StrCat(response_code);
   response_headers["content-length"] = absl::StrCat(body.length());
   AddResponse(host, path, std::move(response_headers), body);
@@ -172,22 +172,22 @@
 
 void QuicMemoryCacheBackend::AddResponse(absl::string_view host,
                                          absl::string_view path,
-                                         Http2HeaderBlock response_headers,
+                                         HttpHeaderBlock response_headers,
                                          absl::string_view response_body) {
   AddResponseImpl(host, path, QuicBackendResponse::REGULAR_RESPONSE,
-                  std::move(response_headers), response_body,
-                  Http2HeaderBlock(), std::vector<spdy::Http2HeaderBlock>());
+                  std::move(response_headers), response_body, HttpHeaderBlock(),
+                  std::vector<quiche::HttpHeaderBlock>());
 }
 
 void QuicMemoryCacheBackend::AddResponse(absl::string_view host,
                                          absl::string_view path,
-                                         Http2HeaderBlock response_headers,
+                                         HttpHeaderBlock response_headers,
                                          absl::string_view response_body,
-                                         Http2HeaderBlock response_trailers) {
+                                         HttpHeaderBlock response_trailers) {
   AddResponseImpl(host, path, QuicBackendResponse::REGULAR_RESPONSE,
                   std::move(response_headers), response_body,
                   std::move(response_trailers),
-                  std::vector<spdy::Http2HeaderBlock>());
+                  std::vector<quiche::HttpHeaderBlock>());
 }
 
 bool QuicMemoryCacheBackend::SetResponseDelay(absl::string_view host,
@@ -203,27 +203,27 @@
 
 void QuicMemoryCacheBackend::AddResponseWithEarlyHints(
     absl::string_view host, absl::string_view path,
-    spdy::Http2HeaderBlock response_headers, absl::string_view response_body,
-    const std::vector<spdy::Http2HeaderBlock>& early_hints) {
+    quiche::HttpHeaderBlock response_headers, absl::string_view response_body,
+    const std::vector<quiche::HttpHeaderBlock>& early_hints) {
   AddResponseImpl(host, path, QuicBackendResponse::REGULAR_RESPONSE,
-                  std::move(response_headers), response_body,
-                  Http2HeaderBlock(), early_hints);
+                  std::move(response_headers), response_body, HttpHeaderBlock(),
+                  early_hints);
 }
 
 void QuicMemoryCacheBackend::AddSpecialResponse(
     absl::string_view host, absl::string_view path,
     SpecialResponseType response_type) {
-  AddResponseImpl(host, path, response_type, Http2HeaderBlock(), "",
-                  Http2HeaderBlock(), std::vector<spdy::Http2HeaderBlock>());
+  AddResponseImpl(host, path, response_type, HttpHeaderBlock(), "",
+                  HttpHeaderBlock(), std::vector<quiche::HttpHeaderBlock>());
 }
 
 void QuicMemoryCacheBackend::AddSpecialResponse(
     absl::string_view host, absl::string_view path,
-    spdy::Http2HeaderBlock response_headers, absl::string_view response_body,
+    quiche::HttpHeaderBlock response_headers, absl::string_view response_body,
     SpecialResponseType response_type) {
   AddResponseImpl(host, path, response_type, std::move(response_headers),
-                  response_body, Http2HeaderBlock(),
-                  std::vector<spdy::Http2HeaderBlock>());
+                  response_body, HttpHeaderBlock(),
+                  std::vector<quiche::HttpHeaderBlock>());
 }
 
 QuicMemoryCacheBackend::QuicMemoryCacheBackend() : cache_initialized_(false) {}
@@ -273,7 +273,7 @@
 void QuicMemoryCacheBackend::GenerateDynamicResponses() {
   QuicWriterMutexLock lock(&response_mutex_);
   // Add a generate bytes response.
-  spdy::Http2HeaderBlock response_headers;
+  quiche::HttpHeaderBlock response_headers;
   response_headers[":status"] = "200";
   generate_bytes_response_ = std::make_unique<QuicBackendResponse>();
   generate_bytes_response_->set_headers(std::move(response_headers));
@@ -290,8 +290,7 @@
 }
 
 void QuicMemoryCacheBackend::FetchResponseFromBackend(
-    const Http2HeaderBlock& request_headers,
-    const std::string& /*request_body*/,
+    const HttpHeaderBlock& request_headers, const std::string& /*request_body*/,
     QuicSimpleServerBackend::RequestHandler* quic_stream) {
   const QuicBackendResponse* quic_response = nullptr;
   // Find response in cache. If not found, send error response.
@@ -320,7 +319,7 @@
 
 QuicMemoryCacheBackend::WebTransportResponse
 QuicMemoryCacheBackend::ProcessWebTransportRequest(
-    const spdy::Http2HeaderBlock& request_headers,
+    const quiche::HttpHeaderBlock& request_headers,
     WebTransportSession* session) {
   if (!SupportsWebTransport()) {
     return QuicSimpleServerBackend::ProcessWebTransportRequest(request_headers,
@@ -356,9 +355,9 @@
 
 void QuicMemoryCacheBackend::AddResponseImpl(
     absl::string_view host, absl::string_view path,
-    SpecialResponseType response_type, Http2HeaderBlock response_headers,
-    absl::string_view response_body, Http2HeaderBlock response_trailers,
-    const std::vector<spdy::Http2HeaderBlock>& early_hints) {
+    SpecialResponseType response_type, HttpHeaderBlock response_headers,
+    absl::string_view response_body, HttpHeaderBlock response_trailers,
+    const std::vector<quiche::HttpHeaderBlock>& early_hints) {
   QuicWriterMutexLock lock(&response_mutex_);
 
   QUICHE_DCHECK(!host.empty())
diff --git a/quiche/quic/tools/quic_memory_cache_backend.h b/quiche/quic/tools/quic_memory_cache_backend.h
index 930ef58..ed47d1d 100644
--- a/quiche/quic/tools/quic_memory_cache_backend.h
+++ b/quiche/quic/tools/quic_memory_cache_backend.h
@@ -16,7 +16,7 @@
 #include "quiche/quic/platform/api/quic_mutex.h"
 #include "quiche/quic/tools/quic_backend_response.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
-#include "quiche/spdy/core/http2_header_block.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/spdy/core/spdy_framer.h"
 
 namespace quic {
@@ -48,7 +48,7 @@
 
     absl::string_view path() { return path_; }
 
-    const spdy::Http2HeaderBlock& spdy_headers() { return spdy_headers_; }
+    const quiche::HttpHeaderBlock& spdy_headers() { return spdy_headers_; }
 
     absl::string_view body() { return body_; }
 
@@ -61,7 +61,7 @@
     std::string file_name_;
     std::string file_contents_;
     absl::string_view body_;
-    spdy::Http2HeaderBlock spdy_headers_;
+    quiche::HttpHeaderBlock spdy_headers_;
     absl::string_view x_original_url_;
     std::vector<absl::string_view> push_urls_;
     std::string host_;
@@ -85,20 +85,20 @@
 
   // Add a response to the cache.
   void AddResponse(absl::string_view host, absl::string_view path,
-                   spdy::Http2HeaderBlock response_headers,
+                   quiche::HttpHeaderBlock response_headers,
                    absl::string_view response_body);
 
   // Add a response, with trailers, to the cache.
   void AddResponse(absl::string_view host, absl::string_view path,
-                   spdy::Http2HeaderBlock response_headers,
+                   quiche::HttpHeaderBlock response_headers,
                    absl::string_view response_body,
-                   spdy::Http2HeaderBlock response_trailers);
+                   quiche::HttpHeaderBlock response_trailers);
 
   // Add a response, with 103 Early Hints, to the cache.
   void AddResponseWithEarlyHints(
       absl::string_view host, absl::string_view path,
-      spdy::Http2HeaderBlock response_headers, absl::string_view response_body,
-      const std::vector<spdy::Http2HeaderBlock>& early_hints);
+      quiche::HttpHeaderBlock response_headers, absl::string_view response_body,
+      const std::vector<quiche::HttpHeaderBlock>& early_hints);
 
   // Simulate a special behavior at a particular path.
   void AddSpecialResponse(
@@ -107,7 +107,7 @@
 
   void AddSpecialResponse(
       absl::string_view host, absl::string_view path,
-      spdy::Http2HeaderBlock response_headers, absl::string_view response_body,
+      quiche::HttpHeaderBlock response_headers, absl::string_view response_body,
       QuicBackendResponse::SpecialResponseType response_type);
 
   // Finds a response with the given host and path, and assign it a simulated
@@ -131,23 +131,23 @@
   bool InitializeBackend(const std::string& cache_directory) override;
   bool IsBackendInitialized() const override;
   void FetchResponseFromBackend(
-      const spdy::Http2HeaderBlock& request_headers,
+      const quiche::HttpHeaderBlock& request_headers,
       const std::string& request_body,
       QuicSimpleServerBackend::RequestHandler* quic_stream) override;
   void CloseBackendResponseStream(
       QuicSimpleServerBackend::RequestHandler* quic_stream) override;
   WebTransportResponse ProcessWebTransportRequest(
-      const spdy::Http2HeaderBlock& request_headers,
+      const quiche::HttpHeaderBlock& request_headers,
       WebTransportSession* session) override;
   bool SupportsWebTransport() override { return enable_webtransport_; }
 
  private:
   void AddResponseImpl(absl::string_view host, absl::string_view path,
                        QuicBackendResponse::SpecialResponseType response_type,
-                       spdy::Http2HeaderBlock response_headers,
+                       quiche::HttpHeaderBlock response_headers,
                        absl::string_view response_body,
-                       spdy::Http2HeaderBlock response_trailers,
-                       const std::vector<spdy::Http2HeaderBlock>& early_hints);
+                       quiche::HttpHeaderBlock response_trailers,
+                       const std::vector<quiche::HttpHeaderBlock>& early_hints);
 
   std::string GetKey(absl::string_view host, absl::string_view path) const;
 
diff --git a/quiche/quic/tools/quic_memory_cache_backend_test.cc b/quiche/quic/tools/quic_memory_cache_backend_test.cc
index 6f16ee3..3daa293 100644
--- a/quiche/quic/tools/quic_memory_cache_backend_test.cc
+++ b/quiche/quic/tools/quic_memory_cache_backend_test.cc
@@ -25,7 +25,7 @@
 class QuicMemoryCacheBackendTest : public QuicTest {
  protected:
   void CreateRequest(std::string host, std::string path,
-                     spdy::Http2HeaderBlock* headers) {
+                     quiche::HttpHeaderBlock* headers) {
     (*headers)[":method"] = "GET";
     (*headers)[":path"] = path;
     (*headers)[":authority"] = host;
@@ -49,7 +49,7 @@
   std::string response_body("hello response");
   cache_.AddSimpleResponse("www.google.com", "/", 200, response_body);
 
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   CreateRequest("www.google.com", "/", &request_headers);
   const Response* response = cache_.GetResponse("www.google.com", "/");
   ASSERT_TRUE(response);
@@ -63,11 +63,11 @@
   const std::string kRequestPath = "/";
   const std::string kResponseBody("hello response");
 
-  spdy::Http2HeaderBlock response_headers;
+  quiche::HttpHeaderBlock response_headers;
   response_headers[":status"] = "200";
   response_headers["content-length"] = absl::StrCat(kResponseBody.size());
 
-  spdy::Http2HeaderBlock response_trailers;
+  quiche::HttpHeaderBlock response_trailers;
   response_trailers["key-1"] = "value-1";
   response_trailers["key-2"] = "value-2";
   response_trailers["key-3"] = "value-3";
@@ -157,7 +157,7 @@
   ASSERT_FALSE(response);
 
   // Add a default response.
-  spdy::Http2HeaderBlock response_headers;
+  quiche::HttpHeaderBlock response_headers;
   response_headers[":status"] = "200";
   response_headers["content-length"] = "0";
   Response* default_response = new Response;
diff --git a/quiche/quic/tools/quic_simple_client_session.cc b/quiche/quic/tools/quic_simple_client_session.cc
index 5dae254..669ed0f 100644
--- a/quiche/quic/tools/quic_simple_client_session.cc
+++ b/quiche/quic/tools/quic_simple_client_session.cc
@@ -8,7 +8,7 @@
 #include <utility>
 
 #include "quiche/quic/core/quic_path_validator.h"
-#include "quiche/spdy/core/http2_header_block.h"
+#include "quiche/common/http/http_header_block.h"
 
 namespace quic {
 
@@ -39,9 +39,10 @@
   auto stream = std::make_unique<QuicSimpleClientStream>(
       GetNextOutgoingBidirectionalStreamId(), this, BIDIRECTIONAL,
       drop_response_body_);
-  stream->set_on_interim_headers([this](const spdy::Http2HeaderBlock& headers) {
-    on_interim_headers_(headers);
-  });
+  stream->set_on_interim_headers(
+      [this](const quiche::HttpHeaderBlock& headers) {
+        on_interim_headers_(headers);
+      });
   return stream;
 }
 
diff --git a/quiche/quic/tools/quic_simple_client_session.h b/quiche/quic/tools/quic_simple_client_session.h
index 424051c..1e9c524 100644
--- a/quiche/quic/tools/quic_simple_client_session.h
+++ b/quiche/quic/tools/quic_simple_client_session.h
@@ -11,8 +11,8 @@
 #include "quiche/quic/core/http/quic_spdy_client_session.h"
 #include "quiche/quic/tools/quic_client_base.h"
 #include "quiche/quic/tools/quic_simple_client_stream.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/quiche_callbacks.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace quic {
 
@@ -46,13 +46,13 @@
   bool drop_response_body() const { return drop_response_body_; }
 
   void set_on_interim_headers(
-      quiche::MultiUseCallback<void(const spdy::Http2HeaderBlock&)>
+      quiche::MultiUseCallback<void(const quiche::HttpHeaderBlock&)>
           on_interim_headers) {
     on_interim_headers_ = std::move(on_interim_headers);
   }
 
  private:
-  quiche::MultiUseCallback<void(const spdy::Http2HeaderBlock&)>
+  quiche::MultiUseCallback<void(const quiche::HttpHeaderBlock&)>
       on_interim_headers_;
   QuicClientBase::NetworkHelper* network_helper_;
   const bool drop_response_body_;
diff --git a/quiche/quic/tools/quic_simple_client_stream.h b/quiche/quic/tools/quic_simple_client_stream.h
index db7588b..9645240 100644
--- a/quiche/quic/tools/quic_simple_client_stream.h
+++ b/quiche/quic/tools/quic_simple_client_stream.h
@@ -22,7 +22,7 @@
   void OnBodyAvailable() override;
 
   void set_on_interim_headers(
-      quiche::MultiUseCallback<void(const spdy::Http2HeaderBlock&)>
+      quiche::MultiUseCallback<void(const quiche::HttpHeaderBlock&)>
           on_interim_headers) {
     on_interim_headers_ = std::move(on_interim_headers);
   }
@@ -31,7 +31,7 @@
   bool ParseAndValidateStatusCode() override;
 
  private:
-  quiche::MultiUseCallback<void(const spdy::Http2HeaderBlock&)>
+  quiche::MultiUseCallback<void(const quiche::HttpHeaderBlock&)>
       on_interim_headers_;
   const bool drop_response_body_;
 };
diff --git a/quiche/quic/tools/quic_simple_server_backend.h b/quiche/quic/tools/quic_simple_server_backend.h
index a142dd8..4d28b32 100644
--- a/quiche/quic/tools/quic_simple_server_backend.h
+++ b/quiche/quic/tools/quic_simple_server_backend.h
@@ -15,7 +15,7 @@
 #include "quiche/quic/core/socket_factory.h"
 #include "quiche/quic/core/web_transport_interface.h"
 #include "quiche/quic/tools/quic_backend_response.h"
-#include "quiche/spdy/core/http2_header_block.h"
+#include "quiche/common/http/http_header_block.h"
 
 namespace quic {
 
@@ -50,7 +50,7 @@
   };
 
   struct WebTransportResponse {
-    spdy::Http2HeaderBlock response_headers;
+    quiche::HttpHeaderBlock response_headers;
     std::unique_ptr<WebTransportVisitor> visitor;
   };
 
@@ -73,7 +73,7 @@
   //
   // Not called for requests using the CONNECT method.
   virtual void FetchResponseFromBackend(
-      const spdy::Http2HeaderBlock& request_headers,
+      const quiche::HttpHeaderBlock& request_headers,
       const std::string& request_body, RequestHandler* request_handler) = 0;
 
   // Handles headers for requests using the CONNECT method. Called immediately
@@ -84,9 +84,9 @@
   // If not overridden by backend, sends an error appropriate for a server that
   // does not handle CONNECT requests.
   virtual void HandleConnectHeaders(
-      const spdy::Http2HeaderBlock& /*request_headers*/,
+      const quiche::HttpHeaderBlock& /*request_headers*/,
       RequestHandler* request_handler) {
-    spdy::Http2HeaderBlock headers;
+    quiche::HttpHeaderBlock headers;
     headers[":status"] = "405";
     QuicBackendResponse response;
     response.set_headers(std::move(headers));
@@ -108,7 +108,7 @@
   virtual void CloseBackendResponseStream(RequestHandler* request_handler) = 0;
 
   virtual WebTransportResponse ProcessWebTransportRequest(
-      const spdy::Http2HeaderBlock& /*request_headers*/,
+      const quiche::HttpHeaderBlock& /*request_headers*/,
       WebTransportSession* /*session*/) {
     WebTransportResponse response;
     response.response_headers[":status"] = "400";
diff --git a/quiche/quic/tools/quic_simple_server_session.h b/quiche/quic/tools/quic_simple_server_session.h
index 14516f5..476f074 100644
--- a/quiche/quic/tools/quic_simple_server_session.h
+++ b/quiche/quic/tools/quic_simple_server_session.h
@@ -23,7 +23,7 @@
 #include "quiche/quic/tools/quic_backend_response.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
 #include "quiche/quic/tools/quic_simple_server_stream.h"
-#include "quiche/spdy/core/http2_header_block.h"
+#include "quiche/common/http/http_header_block.h"
 
 namespace quic {
 
diff --git a/quiche/quic/tools/quic_simple_server_stream.cc b/quiche/quic/tools/quic_simple_server_stream.cc
index b71b448..d8bfa58 100644
--- a/quiche/quic/tools/quic_simple_server_stream.cc
+++ b/quiche/quic/tools/quic_simple_server_stream.cc
@@ -25,7 +25,7 @@
 #include "quiche/quic/tools/quic_simple_server_session.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 
-using spdy::Http2HeaderBlock;
+using quiche::HttpHeaderBlock;
 
 namespace quic {
 
@@ -310,7 +310,7 @@
   std::string request_url = request_headers_[":authority"].as_string() +
                             request_headers_[":path"].as_string();
   int response_code;
-  const Http2HeaderBlock& response_headers = response->headers();
+  const HttpHeaderBlock& response_headers = response->headers();
   if (!ParseHeaderStatusCode(response_headers, &response_code)) {
     auto status = response_headers.find(":status");
     if (status == response_headers.end()) {
@@ -341,7 +341,7 @@
       SendNotFoundResponse();
       return;
     }
-    Http2HeaderBlock headers = response->headers().Clone();
+    HttpHeaderBlock headers = response->headers().Clone();
     headers["content-length"] = absl::StrCat(generate_bytes_length_);
 
     WriteHeaders(std::move(headers), false, nullptr);
@@ -366,7 +366,7 @@
   if (close_stream) {
     SendHeadersAndBodyAndTrailers(
         /*response_headers=*/std::nullopt, data,
-        /*response_trailers=*/spdy::Http2HeaderBlock());
+        /*response_trailers=*/quiche::HttpHeaderBlock());
   } else {
     SendIncompleteResponse(/*response_headers=*/std::nullopt, data);
   }
@@ -397,7 +397,7 @@
 
 void QuicSimpleServerStream::SendNotFoundResponse() {
   QUIC_DVLOG(1) << "Stream " << id() << " sending not found response.";
-  Http2HeaderBlock headers;
+  HttpHeaderBlock headers;
   headers[":status"] = "404";
   headers["content-length"] = absl::StrCat(strlen(kNotFoundResponseBody));
   SendHeadersAndBody(std::move(headers), kNotFoundResponseBody);
@@ -410,7 +410,7 @@
   if (!reading_stopped()) {
     StopReading();
   }
-  Http2HeaderBlock headers;
+  HttpHeaderBlock headers;
   if (resp_code <= 0) {
     headers[":status"] = "500";
   } else {
@@ -421,7 +421,7 @@
 }
 
 void QuicSimpleServerStream::SendIncompleteResponse(
-    std::optional<Http2HeaderBlock> response_headers, absl::string_view body) {
+    std::optional<HttpHeaderBlock> response_headers, absl::string_view body) {
   // Headers should be sent iff not sent in a previous response.
   QUICHE_DCHECK_NE(response_headers.has_value(), response_sent_);
 
@@ -445,14 +445,14 @@
 }
 
 void QuicSimpleServerStream::SendHeadersAndBody(
-    Http2HeaderBlock response_headers, absl::string_view body) {
+    HttpHeaderBlock response_headers, absl::string_view body) {
   SendHeadersAndBodyAndTrailers(std::move(response_headers), body,
-                                Http2HeaderBlock());
+                                HttpHeaderBlock());
 }
 
 void QuicSimpleServerStream::SendHeadersAndBodyAndTrailers(
-    std::optional<Http2HeaderBlock> response_headers, absl::string_view body,
-    Http2HeaderBlock response_trailers) {
+    std::optional<HttpHeaderBlock> response_headers, absl::string_view body,
+    HttpHeaderBlock response_trailers) {
   // Headers should be sent iff not sent in a previous response.
   QUICHE_DCHECK_NE(response_headers.has_value(), response_sent_);
 
diff --git a/quiche/quic/tools/quic_simple_server_stream.h b/quiche/quic/tools/quic_simple_server_stream.h
index 998429a..3e9a691 100644
--- a/quiche/quic/tools/quic_simple_server_stream.h
+++ b/quiche/quic/tools/quic_simple_server_stream.h
@@ -14,7 +14,7 @@
 #include "quiche/quic/core/quic_packets.h"
 #include "quiche/quic/tools/quic_backend_response.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
-#include "quiche/spdy/core/http2_header_block.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/spdy/core/spdy_framer.h"
 
 namespace quic {
@@ -79,16 +79,16 @@
   // Sends the response header (if not `std::nullopt`) and body, but not the
   // fin.
   void SendIncompleteResponse(
-      std::optional<spdy::Http2HeaderBlock> response_headers,
+      std::optional<quiche::HttpHeaderBlock> response_headers,
       absl::string_view body);
 
-  void SendHeadersAndBody(spdy::Http2HeaderBlock response_headers,
+  void SendHeadersAndBody(quiche::HttpHeaderBlock response_headers,
                           absl::string_view body);
   void SendHeadersAndBodyAndTrailers(
-      std::optional<spdy::Http2HeaderBlock> response_headers,
-      absl::string_view body, spdy::Http2HeaderBlock response_trailers);
+      std::optional<quiche::HttpHeaderBlock> response_headers,
+      absl::string_view body, quiche::HttpHeaderBlock response_trailers);
 
-  spdy::Http2HeaderBlock* request_headers() { return &request_headers_; }
+  quiche::HttpHeaderBlock* request_headers() { return &request_headers_; }
 
   // Returns true iff the request (per saved `request_headers_`) is a CONNECT or
   // Extended CONNECT request.
@@ -107,7 +107,7 @@
   bool response_sent() const { return response_sent_; }
   void set_response_sent() { response_sent_ = true; }
   // The parsed headers received from the client.
-  spdy::Http2HeaderBlock request_headers_;
+  quiche::HttpHeaderBlock request_headers_;
   int64_t content_length_;
   std::string body_;
 
diff --git a/quiche/quic/tools/quic_simple_server_stream_test.cc b/quiche/quic/tools/quic_simple_server_stream_test.cc
index e34b709..81cf057 100644
--- a/quiche/quic/tools/quic_simple_server_stream_test.cc
+++ b/quiche/quic/tools/quic_simple_server_stream_test.cc
@@ -75,7 +75,7 @@
               (override));
 
   size_t WriteHeaders(
-      spdy::Http2HeaderBlock header_block, bool fin,
+      quiche::HttpHeaderBlock header_block, bool fin,
       quiche::QuicheReferenceCountedPointer<QuicAckListenerInterface>
       /*ack_listener*/) override {
     if (header_block[":status"] == "103") {
@@ -90,7 +90,7 @@
   void DoSendResponse() { SendResponse(); }
   void DoSendErrorResponse() { QuicSimpleServerStream::SendErrorResponse(); }
 
-  spdy::Http2HeaderBlock* mutable_headers() { return &request_headers_; }
+  quiche::HttpHeaderBlock* mutable_headers() { return &request_headers_; }
   void set_body(std::string body) { body_ = std::move(body); }
   const std::string& body() const { return body_; }
   int content_length() const { return content_length_; }
@@ -204,7 +204,7 @@
     return QuicConsumedData(write_length, state != NO_FIN);
   }
 
-  spdy::Http2HeaderBlock original_request_headers_;
+  quiche::HttpHeaderBlock original_request_headers_;
 };
 
 class QuicSimpleServerStreamTest : public QuicTestWithParam<ParsedQuicVersion> {
@@ -282,7 +282,7 @@
   }
 
   quic::simulator::Simulator simulator_;
-  spdy::Http2HeaderBlock response_headers_;
+  quiche::HttpHeaderBlock response_headers_;
   MockQuicConnectionHelper helper_;
   StrictMock<MockQuicConnection>* connection_;
   StrictMock<MockQuicSessionVisitor> session_owner_;
@@ -399,7 +399,7 @@
 
 TEST_P(QuicSimpleServerStreamTest, SendResponseWithIllegalResponseStatus) {
   // Send an illegal response with response status not supported by HTTP/2.
-  spdy::Http2HeaderBlock* request_headers = stream_->mutable_headers();
+  quiche::HttpHeaderBlock* request_headers = stream_->mutable_headers();
   (*request_headers)[":path"] = "/bar";
   (*request_headers)[":authority"] = "www.google.com";
   (*request_headers)[":method"] = "GET";
@@ -430,7 +430,7 @@
 
 TEST_P(QuicSimpleServerStreamTest, SendResponseWithIllegalResponseStatus2) {
   // Send an illegal response with response status not supported by HTTP/2.
-  spdy::Http2HeaderBlock* request_headers = stream_->mutable_headers();
+  quiche::HttpHeaderBlock* request_headers = stream_->mutable_headers();
   (*request_headers)[":path"] = "/bar";
   (*request_headers)[":authority"] = "www.google.com";
   (*request_headers)[":method"] = "GET";
@@ -462,7 +462,7 @@
 
 TEST_P(QuicSimpleServerStreamTest, SendResponseWithValidHeaders) {
   // Add a request and response with valid headers.
-  spdy::Http2HeaderBlock* request_headers = stream_->mutable_headers();
+  quiche::HttpHeaderBlock* request_headers = stream_->mutable_headers();
   (*request_headers)[":path"] = "/bar";
   (*request_headers)[":authority"] = "www.google.com";
   (*request_headers)[":method"] = "GET";
@@ -496,18 +496,18 @@
   std::string body = "Yummm";
 
   // Add a request and response with early hints.
-  spdy::Http2HeaderBlock* request_headers = stream_->mutable_headers();
+  quiche::HttpHeaderBlock* request_headers = stream_->mutable_headers();
   (*request_headers)[":path"] = request_path;
   (*request_headers)[":authority"] = host;
   (*request_headers)[":method"] = "GET";
 
   quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
       body.length(), quiche::SimpleBufferAllocator::Get());
-  std::vector<spdy::Http2HeaderBlock> early_hints;
+  std::vector<quiche::HttpHeaderBlock> early_hints;
   // Add two Early Hints.
   const size_t kNumEarlyHintsResponses = 2;
   for (size_t i = 0; i < kNumEarlyHintsResponses; ++i) {
-    spdy::Http2HeaderBlock hints;
+    quiche::HttpHeaderBlock hints;
     hints["link"] = "</image.png>; rel=preload; as=image";
     early_hints.push_back(std::move(hints));
   }
@@ -545,7 +545,7 @@
 
 TEST_P(QuicSimpleServerStreamTest, SendResponseWithDelay) {
   // Add a request and response with valid headers.
-  spdy::Http2HeaderBlock* request_headers = stream_->mutable_headers();
+  quiche::HttpHeaderBlock* request_headers = stream_->mutable_headers();
   std::string host = "www.google.com";
   std::string path = "/bar";
   (*request_headers)[":path"] = path;
@@ -605,7 +605,7 @@
 }
 
 TEST_P(QuicSimpleServerStreamTest, InvalidMultipleContentLength) {
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   // \000 is a way to write the null byte when followed by a literal digit.
   header_list_.OnHeader("content-length", absl::string_view("11\00012", 5));
 
@@ -626,7 +626,7 @@
 }
 
 TEST_P(QuicSimpleServerStreamTest, InvalidLeadingNullContentLength) {
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   // \000 is a way to write the null byte when followed by a literal digit.
   header_list_.OnHeader("content-length", absl::string_view("\00012", 3));
 
@@ -647,7 +647,7 @@
 }
 
 TEST_P(QuicSimpleServerStreamTest, InvalidMultipleContentLengthII) {
-  spdy::Http2HeaderBlock request_headers;
+  quiche::HttpHeaderBlock request_headers;
   // \000 is a way to write the null byte when followed by a literal digit.
   header_list_.OnHeader("content-length", absl::string_view("11\00011", 5));
 
@@ -755,11 +755,11 @@
   }
   bool IsBackendInitialized() const override { return true; }
   MOCK_METHOD(void, FetchResponseFromBackend,
-              (const spdy::Http2HeaderBlock&, const std::string&,
+              (const quiche::HttpHeaderBlock&, const std::string&,
                RequestHandler*),
               (override));
   MOCK_METHOD(void, HandleConnectHeaders,
-              (const spdy::Http2HeaderBlock&, RequestHandler*), (override));
+              (const quiche::HttpHeaderBlock&, RequestHandler*), (override));
   MOCK_METHOD(void, HandleConnectData,
               (absl::string_view, bool, RequestHandler*), (override));
   void CloseBackendResponseStream(
@@ -782,7 +782,7 @@
   ReplaceBackend(std::move(test_backend));
 
   constexpr absl::string_view kRequestBody = "\x11\x11";
-  spdy::Http2HeaderBlock response_headers;
+  quiche::HttpHeaderBlock response_headers;
   response_headers[":status"] = "200";
   QuicBackendResponse headers_response;
   headers_response.set_headers(response_headers.Clone());
diff --git a/quiche/quic/tools/quic_spdy_client_base.cc b/quiche/quic/tools/quic_spdy_client_base.cc
index be16653..f065a7d 100644
--- a/quiche/quic/tools/quic_spdy_client_base.cc
+++ b/quiche/quic/tools/quic_spdy_client_base.cc
@@ -21,7 +21,7 @@
 #include "quiche/quic/platform/api/quic_logging.h"
 #include "quiche/common/quiche_text_utils.h"
 
-using spdy::Http2HeaderBlock;
+using quiche::HttpHeaderBlock;
 
 namespace quic {
 
@@ -64,7 +64,7 @@
   QuicSpdyClientStream* client_stream =
       static_cast<QuicSpdyClientStream*>(stream);
 
-  const Http2HeaderBlock& response_headers = client_stream->response_headers();
+  const HttpHeaderBlock& response_headers = client_stream->response_headers();
   if (response_listener_ != nullptr) {
     response_listener_->OnCompleteResponse(stream->id(), response_headers,
                                            client_stream->data());
@@ -79,7 +79,7 @@
       QUIC_LOG(ERROR) << "Invalid :status response header: " << status->second;
     }
     latest_response_headers_ = response_headers.DebugString();
-    for (const Http2HeaderBlock& headers :
+    for (const HttpHeaderBlock& headers :
          client_stream->preliminary_headers()) {
       absl::StrAppend(&preliminary_response_headers_, headers.DebugString());
     }
@@ -99,11 +99,11 @@
       *config(), supported_versions, connection, server_id(), crypto_config());
 }
 
-void QuicSpdyClientBase::SendRequest(const Http2HeaderBlock& headers,
+void QuicSpdyClientBase::SendRequest(const HttpHeaderBlock& headers,
                                      absl::string_view body, bool fin) {
   if (GetQuicFlag(quic_client_convert_http_header_name_to_lowercase)) {
     QUIC_CODE_COUNT(quic_client_convert_http_header_name_to_lowercase);
-    Http2HeaderBlock sanitized_headers;
+    HttpHeaderBlock sanitized_headers;
     for (const auto& p : headers) {
       sanitized_headers[quiche::QuicheTextUtils::ToLower(p.first)] = p.second;
     }
@@ -114,7 +114,7 @@
   }
 }
 
-void QuicSpdyClientBase::SendRequestInternal(Http2HeaderBlock sanitized_headers,
+void QuicSpdyClientBase::SendRequestInternal(HttpHeaderBlock sanitized_headers,
                                              absl::string_view body, bool fin) {
   QuicSpdyClientStream* stream = CreateClientStream();
   if (stream == nullptr) {
@@ -125,7 +125,7 @@
 }
 
 void QuicSpdyClientBase::SendRequestAndWaitForResponse(
-    const Http2HeaderBlock& headers, absl::string_view body, bool fin) {
+    const HttpHeaderBlock& headers, absl::string_view body, bool fin) {
   SendRequest(headers, body, fin);
   while (WaitForEvents()) {
   }
@@ -134,7 +134,7 @@
 void QuicSpdyClientBase::SendRequestsAndWaitForResponse(
     const std::vector<std::string>& url_list) {
   for (size_t i = 0; i < url_list.size(); ++i) {
-    Http2HeaderBlock headers;
+    HttpHeaderBlock headers;
     if (!SpdyUtils::PopulateHeaderBlockFromUrl(url_list[i], &headers)) {
       QUIC_BUG(quic_bug_10949_2) << "Unable to create request";
       continue;
@@ -203,7 +203,7 @@
   return preliminary_response_headers_;
 }
 
-const Http2HeaderBlock& QuicSpdyClientBase::latest_response_header_block()
+const HttpHeaderBlock& QuicSpdyClientBase::latest_response_header_block()
     const {
   QUIC_BUG_IF(quic_bug_10949_6, !store_response_) << "Response not stored!";
   return latest_response_header_block_;
diff --git a/quiche/quic/tools/quic_spdy_client_base.h b/quiche/quic/tools/quic_spdy_client_base.h
index a6ef509..f65758f 100644
--- a/quiche/quic/tools/quic_spdy_client_base.h
+++ b/quiche/quic/tools/quic_spdy_client_base.h
@@ -17,7 +17,7 @@
 #include "quiche/quic/core/quic_config.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/quic/tools/quic_client_base.h"
-#include "quiche/spdy/core/http2_header_block.h"
+#include "quiche/common/http/http_header_block.h"
 
 namespace quic {
 
@@ -34,7 +34,7 @@
     ResponseListener() {}
     virtual ~ResponseListener() {}
     virtual void OnCompleteResponse(
-        QuicStreamId id, const spdy::Http2HeaderBlock& response_headers,
+        QuicStreamId id, const quiche::HttpHeaderBlock& response_headers,
         absl::string_view response_body) = 0;
   };
 
@@ -59,11 +59,11 @@
   void InitializeSession() override;
 
   // Sends an HTTP request and does not wait for response before returning.
-  void SendRequest(const spdy::Http2HeaderBlock& headers,
+  void SendRequest(const quiche::HttpHeaderBlock& headers,
                    absl::string_view body, bool fin);
 
   // Sends an HTTP request and waits for response before returning.
-  void SendRequestAndWaitForResponse(const spdy::Http2HeaderBlock& headers,
+  void SendRequestAndWaitForResponse(const quiche::HttpHeaderBlock& headers,
                                      absl::string_view body, bool fin);
 
   // Sends a request simple GET for each URL in |url_list|, and then waits for
@@ -83,7 +83,7 @@
   int latest_response_code() const;
   const std::string& latest_response_headers() const;
   const std::string& preliminary_response_headers() const;
-  const spdy::Http2HeaderBlock& latest_response_header_block() const;
+  const quiche::HttpHeaderBlock& latest_response_header_block() const;
   const std::string& latest_response_body() const;
   const std::string& latest_response_trailers() const;
 
@@ -136,7 +136,7 @@
   bool HasActiveRequests() override;
 
  private:
-  void SendRequestInternal(spdy::Http2HeaderBlock sanitized_headers,
+  void SendRequestInternal(quiche::HttpHeaderBlock sanitized_headers,
                            absl::string_view body, bool fin);
 
   // If true, store the latest response code, headers, and body.
@@ -148,7 +148,7 @@
   // preliminary 100 Continue HTTP/2 headers from most recent response, if any.
   std::string preliminary_response_headers_;
   // HTTP/2 headers from most recent response.
-  spdy::Http2HeaderBlock latest_response_header_block_;
+  quiche::HttpHeaderBlock latest_response_header_block_;
   // Body of most recent response.
   std::string latest_response_body_;
   // HTTP/2 trailers from most recent response.
diff --git a/quiche/quic/tools/quic_toy_client.cc b/quiche/quic/tools/quic_toy_client.cc
index 2fae8e5..79aafb7 100644
--- a/quiche/quic/tools/quic_toy_client.cc
+++ b/quiche/quic/tools/quic_toy_client.cc
@@ -62,10 +62,10 @@
 #include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/quic/tools/fake_proof_verifier.h"
 #include "quiche/quic/tools/quic_url.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/platform/api/quiche_command_line_flags.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/quiche_text_utils.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace {
 
@@ -437,7 +437,7 @@
   }
 
   // Construct a GET or POST request for supplied URL.
-  spdy::Http2HeaderBlock header_block;
+  quiche::HttpHeaderBlock header_block;
   header_block[":method"] = body.empty() ? "GET" : "POST";
   header_block[":scheme"] = url.scheme();
   header_block[":authority"] = url.HostPort();
diff --git a/quiche/quic/tools/web_transport_only_backend.h b/quiche/quic/tools/web_transport_only_backend.h
index cd37672..b2fd036 100644
--- a/quiche/quic/tools/web_transport_only_backend.h
+++ b/quiche/quic/tools/web_transport_only_backend.h
@@ -13,9 +13,9 @@
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/web_transport_interface.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
+#include "quiche/common/http/http_header_block.h"
 #include "quiche/common/quiche_callbacks.h"
 #include "quiche/web_transport/web_transport.h"
-#include "quiche/spdy/core/http2_header_block.h"
 
 namespace quic {
 
@@ -33,13 +33,13 @@
   // QuicSimpleServerBackend implementation.
   bool InitializeBackend(const std::string&) override { return true; }
   bool IsBackendInitialized() const override { return true; }
-  void FetchResponseFromBackend(const spdy::Http2HeaderBlock&,
+  void FetchResponseFromBackend(const quiche::HttpHeaderBlock&,
                                 const std::string&,
                                 RequestHandler* request_handler) override;
   void CloseBackendResponseStream(RequestHandler*) override {}
   bool SupportsWebTransport() override { return true; }
   WebTransportResponse ProcessWebTransportRequest(
-      const spdy::Http2HeaderBlock& request_headers,
+      const quiche::HttpHeaderBlock& request_headers,
       WebTransportSession* session) override;
 
  private: