diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
index fab000d..3ea2e1b 100644
--- a/Lib/test/test_xmlrpc.py
+++ b/Lib/test/test_xmlrpc.py
@@ -799,7 +799,11 @@
     xmlrpc_tests.append(SimpleServerTestCase)
     xmlrpc_tests.append(KeepaliveServerTestCase1)
     xmlrpc_tests.append(KeepaliveServerTestCase2)
-    xmlrpc_tests.append(GzipServerTestCase)
+    try:
+        import gzip
+        xmlrpc_tests.append(GzipServerTestCase)
+    except ImportError:
+        pass #gzip not supported in this build
     xmlrpc_tests.append(ServerProxyTestCase)
     xmlrpc_tests.append(FailingServerTestCase)
     xmlrpc_tests.append(CGIHandlerTestCase)
diff --git a/Lib/xmlrpc/client.py b/Lib/xmlrpc/client.py
index 9f72931..fc32925 100644
--- a/Lib/xmlrpc/client.py
+++ b/Lib/xmlrpc/client.py
@@ -136,10 +136,13 @@
 import re, time, operator
 import http.client
 from xml.parsers import expat
-import gzip
 import socket
 import errno
 from io import BytesIO
+try:
+    import gzip
+except ImportError:
+    gzip = None #python can be built without zlib/gzip support
 
 # --------------------------------------------------------------------
 # Internal stuff
@@ -1030,6 +1033,8 @@
 
     Encode data using the gzip content encoding as described in RFC 1952
     """
+    if not gzip:
+        raise NotImplementedError
     f = BytesIO()
     gzf = gzip.GzipFile(mode="wb", fileobj=f, compresslevel=1)
     gzf.write(data)
@@ -1052,6 +1057,8 @@
 
     Decode data using the gzip content encoding as described in RFC 1952
     """
+    if not gzip:
+        raise NotImplementedError
     f = BytesIO(data)
     gzf = gzip.GzipFile(mode="rb", fileobj=f)
     try:
@@ -1076,6 +1083,8 @@
     def __init__(self, response):
         #response doesn't support tell() and read(), required by
         #GzipFile
+        if not gzip:
+            raise NotImplementedError
         self.io = BytesIO(response.read())
         gzip.GzipFile.__init__(self, mode="rb", fileobj=self.io)
 
@@ -1253,7 +1262,7 @@
         headers = self._extra_headers[:]
         if debug:
             connection.set_debuglevel(1)
-        if self.accept_gzip_encoding:
+        if self.accept_gzip_encoding and gzip:
             connection.putrequest("POST", handler, skip_accept_encoding=True)
             headers.append(("Accept-Encoding", "gzip"))
         else:
@@ -1285,7 +1294,8 @@
     def send_content(self, connection, request_body):
         #optionally encode the request
         if (self.encode_threshold is not None and
-            self.encode_threshold < len(request_body)):
+            self.encode_threshold < len(request_body) and
+            gzip):
             connection.putheader("Content-Encoding", "gzip")
             request_body = gzip_encode(request_body)
 
diff --git a/Lib/xmlrpc/server.py b/Lib/xmlrpc/server.py
index 273202f..2194775 100644
--- a/Lib/xmlrpc/server.py
+++ b/Lib/xmlrpc/server.py
@@ -509,8 +509,11 @@
                 if len(response) > self.encode_threshold:
                     q = self.accept_encodings().get("gzip", 0)
                     if q:
-                        response = gzip_encode(response)
-                        self.send_header("Content-Encoding", "gzip")
+                        try:
+                            response = gzip_encode(response)
+                            self.send_header("Content-Encoding", "gzip")
+                        except NotImplementedError:
+                            pass
             self.send_header("Content-length", str(len(response)))
             self.end_headers()
             self.wfile.write(response)
@@ -523,6 +526,8 @@
         if encoding == "gzip":
             try:
                 return gzip_decode(data)
+            except NotImplementedError:
+                self.send_response(501, "encoding %r not supported" % encoding)
             except ValueError:
                 self.send_response(400, "error decoding gzip content")
         else:
