diff --git a/spdy/core/spdy_alt_svc_wire_format.cc b/spdy/core/spdy_alt_svc_wire_format.cc
index 4f6b4f3..5b6af98 100644
--- a/spdy/core/spdy_alt_svc_wire_format.cc
+++ b/spdy/core/spdy_alt_svc_wire_format.cc
@@ -265,15 +265,14 @@
       }
       value.push_back(c);
     }
-    value.append(absl::StrCat(":", altsvc.port, "\""));
+    absl::StrAppend(&value, ":", altsvc.port, "\"");
     if (altsvc.max_age != 86400) {
-      value.append(absl::StrCat("; ma=", altsvc.max_age));
+      absl::StrAppend(&value, "; ma=", altsvc.max_age);
     }
     if (!altsvc.version.empty()) {
       if (is_ietf_format_quic) {
         for (uint32_t quic_version : altsvc.version) {
-          value.append("; quic=");
-          value.append(SpdyHexEncodeUInt32AndTrim(quic_version));
+          absl::StrAppend(&value, "; quic=", absl::Hex(quic_version));
         }
       } else {
         value.append("; v=\"");
@@ -282,7 +281,7 @@
           if (it != altsvc.version.begin()) {
             value.append(",");
           }
-          value.append(absl::StrCat(*it));
+          absl::StrAppend(&value, *it);
         }
         value.append("\"");
       }
diff --git a/spdy/core/spdy_header_block.cc b/spdy/core/spdy_header_block.cc
index 93ae28f..59a9069 100644
--- a/spdy/core/spdy_header_block.cc
+++ b/spdy/core/spdy_header_block.cc
@@ -9,9 +9,9 @@
 #include <algorithm>
 #include <utility>
 
+#include "absl/strings/str_cat.h"
 #include "spdy/platform/api/spdy_estimate_memory_usage.h"
 #include "spdy/platform/api/spdy_logging.h"
-#include "spdy/platform/api/spdy_string_utils.h"
 
 namespace spdy {
 namespace {
@@ -223,9 +223,9 @@
 
   std::string output = "\n{\n";
   for (auto it = begin(); it != end(); ++it) {
-    SpdyStrAppend(&output, "  ", it->first, " ", it->second, "\n");
+    absl::StrAppend(&output, "  ", it->first, " ", it->second, "\n");
   }
-  SpdyStrAppend(&output, "}\n");
+  absl::StrAppend(&output, "}\n");
   return output;
 }
 
diff --git a/spdy/core/spdy_header_block.h b/spdy/core/spdy_header_block.h
index 76ec436..4658419 100644
--- a/spdy/core/spdy_header_block.h
+++ b/spdy/core/spdy_header_block.h
@@ -14,12 +14,14 @@
 #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 "spdy/core/spdy_header_storage.h"
 #include "spdy/platform/api/spdy_containers.h"
-#include "spdy/platform/api/spdy_string_utils.h"
 
 namespace spdy {
 
@@ -92,10 +94,24 @@
     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 SpdyLinkedHashMap<absl::string_view,
                             HeaderValue,
-                            SpdyStringPieceCaseHash,
-                            SpdyStringPieceCaseEq>
+                            StringPieceCaseHash,
+                            StringPieceCaseEqual>
       MapType;
 
  public:
diff --git a/spdy/core/spdy_protocol.cc b/spdy/core/spdy_protocol.cc
index 4839b9b..ea90b65 100644
--- a/spdy/core/spdy_protocol.cc
+++ b/spdy/core/spdy_protocol.cc
@@ -9,7 +9,6 @@
 
 #include "absl/strings/str_cat.h"
 #include "spdy/platform/api/spdy_bug_tracker.h"
-#include "spdy/platform/api/spdy_string_utils.h"
 
 namespace spdy {
 
@@ -192,8 +191,7 @@
 std::string SettingsIdToString(SpdySettingsId id) {
   SpdyKnownSettingsId known_id;
   if (!ParseSettingsId(id, &known_id)) {
-    return absl::StrCat("SETTINGS_UNKNOWN_",
-                        SpdyHexEncodeUInt32AndTrim(uint32_t{id}));
+    return absl::StrCat("SETTINGS_UNKNOWN_", absl::Hex(uint32_t{id}));
   }
 
   switch (known_id) {
@@ -217,8 +215,7 @@
       return "SETTINGS_EXPERIMENT_SCHEDULER";
   }
 
-  return absl::StrCat("SETTINGS_UNKNOWN_",
-                      SpdyHexEncodeUInt32AndTrim(uint32_t{id}));
+  return absl::StrCat("SETTINGS_UNKNOWN_", absl::Hex(uint32_t{id}));
 }
 
 SpdyErrorCode ParseErrorCode(uint32_t wire_error_code) {
diff --git a/spdy/platform/api/spdy_string_utils.h b/spdy/platform/api/spdy_string_utils.h
index 81a0866..f59bcd9 100644
--- a/spdy/platform/api/spdy_string_utils.h
+++ b/spdy/platform/api/spdy_string_utils.h
@@ -19,11 +19,6 @@
 
 namespace spdy {
 
-template <typename... Args>
-inline void SpdyStrAppend(std::string* output, const Args&... args) {
-  SpdyStrAppendImpl(output, std::forward<const Args&>(args)...);
-}
-
 inline char SpdyHexDigitToInt(char c) {
   return SpdyHexDigitToIntImpl(c);
 }
@@ -40,18 +35,10 @@
   return SpdyHexEncodeImpl(bytes, size);
 }
 
-inline std::string SpdyHexEncodeUInt32AndTrim(uint32_t data) {
-  return SpdyHexEncodeUInt32AndTrimImpl(data);
-}
-
 inline std::string SpdyHexDump(absl::string_view data) {
   return SpdyHexDumpImpl(data);
 }
 
-using SpdyStringPieceCaseHash = SpdyStringPieceCaseHashImpl;
-
-using SpdyStringPieceCaseEq = SpdyStringPieceCaseEqImpl;
-
 }  // namespace spdy
 
 #endif  // QUICHE_SPDY_PLATFORM_API_SPDY_STRING_UTILS_H_
diff --git a/spdy/platform/api/spdy_string_utils_test.cc b/spdy/platform/api/spdy_string_utils_test.cc
index 2964876..cb73a9b 100644
--- a/spdy/platform/api/spdy_string_utils_test.cc
+++ b/spdy/platform/api/spdy_string_utils_test.cc
@@ -13,101 +13,6 @@
 namespace test {
 namespace {
 
-TEST(SpdyStringUtilsTest, SpdyStrAppend) {
-  // No arguments on empty string.
-  std::string output;
-  SpdyStrAppend(&output);
-  EXPECT_TRUE(output.empty());
-
-  // Single string-like argument.
-  const char kFoo[] = "foo";
-  const std::string string_foo(kFoo);
-  const absl::string_view stringpiece_foo(string_foo);
-  SpdyStrAppend(&output, kFoo);
-  EXPECT_EQ("foo", output);
-  SpdyStrAppend(&output, string_foo);
-  EXPECT_EQ("foofoo", output);
-  SpdyStrAppend(&output, stringpiece_foo);
-  EXPECT_EQ("foofoofoo", output);
-
-  // No arguments on non-empty string.
-  SpdyStrAppend(&output);
-  EXPECT_EQ("foofoofoo", output);
-
-  output.clear();
-
-  // Two string-like arguments.
-  const char kBar[] = "bar";
-  const absl::string_view stringpiece_bar(kBar);
-  const std::string string_bar(kBar);
-  SpdyStrAppend(&output, kFoo, kBar);
-  EXPECT_EQ("foobar", output);
-  SpdyStrAppend(&output, kFoo, string_bar);
-  EXPECT_EQ("foobarfoobar", output);
-  SpdyStrAppend(&output, kFoo, stringpiece_bar);
-  EXPECT_EQ("foobarfoobarfoobar", output);
-  SpdyStrAppend(&output, string_foo, kBar);
-  EXPECT_EQ("foobarfoobarfoobarfoobar", output);
-
-  output.clear();
-
-  SpdyStrAppend(&output, string_foo, string_bar);
-  EXPECT_EQ("foobar", output);
-  SpdyStrAppend(&output, string_foo, stringpiece_bar);
-  EXPECT_EQ("foobarfoobar", output);
-  SpdyStrAppend(&output, stringpiece_foo, kBar);
-  EXPECT_EQ("foobarfoobarfoobar", output);
-  SpdyStrAppend(&output, stringpiece_foo, string_bar);
-  EXPECT_EQ("foobarfoobarfoobarfoobar", output);
-
-  output.clear();
-
-  SpdyStrAppend(&output, stringpiece_foo, stringpiece_bar);
-  EXPECT_EQ("foobar", output);
-
-  // Many-many arguments.
-  SpdyStrAppend(&output, "foo", "bar", "baz", "qux", "quux", "quuz", "corge",
-                "grault", "garply", "waldo", "fred", "plugh", "xyzzy", "thud");
-  EXPECT_EQ(
-      "foobarfoobarbazquxquuxquuzcorgegraultgarplywaldofredplughxyzzythud",
-      output);
-
-  output.clear();
-
-  // Numerical arguments.
-  const int16_t i = 1;
-  const uint64_t u = 8;
-  const double d = 3.1415;
-
-  SpdyStrAppend(&output, i, " ", u);
-  EXPECT_EQ("1 8", output);
-  SpdyStrAppend(&output, d, i, i, u, i);
-  EXPECT_EQ("1 83.14151181", output);
-  SpdyStrAppend(&output, "i: ", i, ", u: ", u, ", d: ", d);
-  EXPECT_EQ("1 83.14151181i: 1, u: 8, d: 3.1415", output);
-
-  output.clear();
-
-  // Boolean arguments.
-  const bool t = true;
-  const bool f = false;
-
-  SpdyStrAppend(&output, t);
-  EXPECT_EQ("1", output);
-  SpdyStrAppend(&output, f);
-  EXPECT_EQ("10", output);
-  SpdyStrAppend(&output, f, t, t, f);
-  EXPECT_EQ("100110", output);
-
-  output.clear();
-
-  // Mixed string-like, numerical, and Boolean arguments.
-  SpdyStrAppend(&output, kFoo, i, string_foo, f, u, t, stringpiece_bar, d, t);
-  EXPECT_EQ("foo1foo081bar3.14151", output);
-  SpdyStrAppend(&output, d, t, t, string_bar, i, u, kBar, t, d, f);
-  EXPECT_EQ("foo1foo081bar3.141513.141511bar18bar13.14150", output);
-}
-
 TEST(SpdyStringUtilsTest, SpdyHexDigitToInt) {
   EXPECT_EQ(0, SpdyHexDigitToInt('0'));
   EXPECT_EQ(1, SpdyHexDigitToInt('1'));
@@ -168,40 +73,6 @@
             SpdyHexEncode(reinterpret_cast<char*>(bytes), sizeof(bytes)));
 }
 
-TEST(SpdyStringUtilsTest, SpdyHexEncodeUInt32AndTrim) {
-  EXPECT_EQ("0", SpdyHexEncodeUInt32AndTrim(0));
-  EXPECT_EQ("1", SpdyHexEncodeUInt32AndTrim(1));
-  EXPECT_EQ("a", SpdyHexEncodeUInt32AndTrim(0xA));
-  EXPECT_EQ("f", SpdyHexEncodeUInt32AndTrim(0xF));
-  EXPECT_EQ("a9", SpdyHexEncodeUInt32AndTrim(0xA9));
-  EXPECT_EQ("9abcdef", SpdyHexEncodeUInt32AndTrim(0x9ABCDEF));
-  EXPECT_EQ("12345678", SpdyHexEncodeUInt32AndTrim(0x12345678));
-  EXPECT_EQ("ffffffff", SpdyHexEncodeUInt32AndTrim(0xFFFFFFFF));
-  EXPECT_EQ("10000001", SpdyHexEncodeUInt32AndTrim(0x10000001));
-}
-
-TEST(SpdyStringUtilsTest, SpdyStringPieceCaseHash) {
-  SpdyStringPieceCaseHash hasher;
-  auto mixed = hasher("To Be Or Not To Be, That is The Question");
-  auto lower = hasher("to be or not to be, that is the question");
-  EXPECT_EQ(mixed, lower);
-  auto lower2 = hasher("to be or not to be, that is the question");
-  EXPECT_EQ(lower, lower2);
-  auto different = hasher("to see or not to see, that is the question");
-  EXPECT_NE(lower, different);
-  EXPECT_NE(lower, hasher(""));
-}
-
-TEST(SpdyStringUtilsTest, SpdyStringPieceCaseEq) {
-  SpdyStringPieceCaseEq eq;
-  EXPECT_TRUE(eq("To Be Or Not To Be, That is The Question",
-                 "to be or not to be, that is the question"));
-  EXPECT_TRUE(eq("to be or not to be, that is the question",
-                 "to be or not to be, that is the question"));
-  EXPECT_FALSE(eq("to be or not to be, that is the question",
-                  "to see or not to see, that is the question"));
-}
-
 }  // namespace
 }  // namespace test
 }  // namespace spdy
