diff --git a/mongoose.c b/mongoose.c
index 8b58d2e9..7c4e691d 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -1770,6 +1770,13 @@ struct mg_str mg_strstrip(struct mg_str s) {
   }
   return s;
 }
+
+int mg_str_starts_with(struct mg_str s, struct mg_str prefix) WEAK;
+int mg_str_starts_with(struct mg_str s, struct mg_str prefix) {
+  const struct mg_str sp = MG_MK_STR_N(s.p, prefix.len);
+  if (s.len < prefix.len) return 0;
+  return (mg_strcmp(sp, prefix) == 0);
+}
 #ifdef MG_MODULE_LINES
 #line 1 "common/str_util.c"
 #endif
diff --git a/mongoose.h b/mongoose.h
index 8fe13cd6..4b5b0db6 100644
--- a/mongoose.h
+++ b/mongoose.h
@@ -2239,6 +2239,8 @@ struct mg_str mg_mk_str_n(const char *s, size_t len);
 /* Macro for initializing mg_str. */
 #define MG_MK_STR(str_literal) \
   { str_literal, sizeof(str_literal) - 1 }
+#define MG_MK_STR_N(str_literal, len) \
+  { str_literal, len }
 #define MG_NULL_STR \
   { NULL, 0 }
 
@@ -2286,6 +2288,9 @@ const char *mg_strstr(const struct mg_str haystack, const struct mg_str needle);
 /* Strip whitespace at the start and the end of s */
 struct mg_str mg_strstrip(struct mg_str s);
 
+/* Returns 1 if s starts with the given prefix. */
+int mg_str_starts_with(struct mg_str s, struct mg_str prefix);
+
 #ifdef __cplusplus
 }
 #endif