diff --git a/util/http.py b/util/http.py
new file mode 100644
index 00000000..441ff386
--- /dev/null
+++ b/util/http.py
@@ -0,0 +1,24 @@
+"""Utilities for dealing with HTTP."""
+from __future__ import annotations
+
+from gzip import compress
+
+__all__ = ['gzip']
+
+
+def gzip(data: str | bytes, max_size: int = 512, encoding='utf-8') -> tuple[bytes, bool]:
+    """
+    Compress the given data if the max size is greater than specified.
+
+    :param data: The data to compress
+    :param max_size: The max size of data, in bytes, defaults to 512
+    :param encoding: The encoding to use if data is a str, defaults to 'utf-8'
+    :return: the payload to send, and a bool indicating compression state
+    """
+    if isinstance(data, str):
+        data = data.encode(encoding=encoding)
+
+    if len(data) <= max_size:
+        return data, False
+
+    return compress(data), True