diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java
index 9f4a566..fd10636 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.function.Predicate;
 
 import jakarta.ws.rs.core.Configuration;
 import jakarta.ws.rs.core.Cookie;
@@ -200,15 +201,14 @@
      * class or using its {@code toString} method if a header delegate is not available.
      *
      * @param name the message header.
-     * @param value the message header value.
-     * @param ignoreCase whether to ignore upper/lower case.
+     * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the provided name exists having either the exact value or whose
      * comma-separated header string contains value as a whole word.
      * @see #getHeaders()
      * @see #getHeaderString(String)
      * @since 4.0
      */
-    public boolean containsHeaderString(String name, String value, boolean ignoreCase);
+    public boolean containsHeaderString(String name, Predicate<String> valuePredicate);
 
     /**
      * Get message date.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java
index f9f2549..6482152 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java
@@ -22,6 +22,7 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import jakarta.ws.rs.core.EntityTag;
 import jakarta.ws.rs.core.Link;
@@ -92,15 +93,14 @@
      * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
      *
      * @param name the message header.
-     * @param value the message header value.
-     * @param ignoreCase whether to ignore upper/lower case.
+     * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the provided name exists having either the exact value or whose
      * comma-separated header string contains value as a whole word.
      * @see #getHeaders()
      * @see #getHeaderString(String)
      * @since 4.0
      */
-    public boolean containsHeaderString(String name, String value, boolean ignoreCase);
+    public boolean containsHeaderString(String name, Predicate<String> valuePredicate);
 
     /**
      * Get the allowed HTTP methods from the Allow HTTP header.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java
index c1efb79..36056f3 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.function.Predicate;
 
 import jakarta.ws.rs.core.Cookie;
 import jakarta.ws.rs.core.MediaType;
@@ -232,15 +233,14 @@
      * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
      *
      * @param name the message header.
-     * @param value the message header value.
-     * @param ignoreCase whether to ignore upper/lower case.
+     * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the provided name exists having either the exact value or whose
      * comma-separated header string contains value as a whole word.
      * @see #getHeaders()
      * @see #getHeaderString(String)
      * @since 4.0
      */
-    public boolean containsHeaderString(String name, String value, boolean ignoreCase);
+    public boolean containsHeaderString(String name, Predicate<String> valuePredicate);
 
     /**
      * Get message date.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java
index 40f3e29..186ef4e 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java
@@ -24,6 +24,7 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import jakarta.ws.rs.core.EntityTag;
 import jakarta.ws.rs.core.Link;
@@ -122,15 +123,14 @@
      * class or using its {@code toString} method if a header delegate is not available.
      *
      * @param name the message header.
-     * @param value the message header value.
-     * @param ignoreCase whether to ignore upper/lower case.
+     * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the provided name exists having either the exact value or whose
      * comma-separated header string contains value as a whole word.
      * @see #getHeaders()
      * @see #getHeaderString(String)
      * @since 4.0
      */
-    public boolean containsHeaderString(String name, String value, boolean ignoreCase);
+    public boolean containsHeaderString(String name, Predicate<String> valuePredicate);
 
     /**
      * Get the allowed HTTP methods from the Allow HTTP header.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
index 7233a1c..8a4c0cc 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
@@ -20,6 +20,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.function.Predicate;
 
 /**
  * An injectable interface that provides access to HTTP header information. All methods throw
@@ -68,15 +69,14 @@
      * class or using its {@code toString} method if a header delegate is not available.
      *
      * @param name the message header.
-     * @param value the message header value.
-     * @param ignoreCase whether to ignore upper/lower case.
+     * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the provided name exists having either the exact value or whose
      * comma-separated header string contains value as a whole word.
      * @see #getRequestHeaders()
      * @see #getHeaderString(String)
      * @since 4.0
      */
-    public boolean containsHeaderString(String name, String value, boolean ignoreCase);
+    public boolean containsHeaderString(String name, Predicate<String> valuePredicate);
 
     /**
      * Get the values of HTTP request headers. The returned Map is case-insensitive wrt. keys and is read-only. The method
