diff --git a/jenkins/__init__.py b/jenkins/__init__.py
index b744717..4aea85b 100644
--- a/jenkins/__init__.py
+++ b/jenkins/__init__.py
@@ -65,7 +65,7 @@ CRUMB_URL = 'crumbIssuer/api/json'
 JOB_INFO = 'job/%(name)s/api/json?depth=%(depth)s'
 JOB_NAME = 'job/%(name)s/api/json?tree=name'
 Q_INFO = 'queue/api/json?depth=0'
-CANCEL_QUEUE = 'queue/item/%(number)s/cancelQueue'
+CANCEL_QUEUE = 'queue/cancelItem?id=%(id)s'
 CREATE_JOB = 'createItem?name=%(name)s'  # also post config.xml
 CONFIG_JOB = 'job/%(name)s/config.xml'
 DELETE_JOB = 'job/%(name)s/doDelete'
@@ -300,17 +300,16 @@ class Jenkins(object):
             Request(self.server + Q_INFO)
         ))['items']
 
-    def cancel_queue(self, number):
+    def cancel_queue(self, id):
         '''Cancel a queued build.
 
-        :param number: Jenkins queue number for the build, ``int``
+        :param id: Jenkins job id number for the build, ``int``
         '''
-        # Jenkins returns a 302 from this URL, unless Referer is not set,
-        # then you get a 404.
+        # Jenkins seems to always return a 404 when using this REST endpoint
+        # https://issues.jenkins-ci.org/browse/JENKINS-21311
         self.jenkins_open(
-            Request(
-                self.server + CANCEL_QUEUE % locals(),
-                headers={'Referer': self.server}))
+            Request(self.server + CANCEL_QUEUE % locals(), '',
+                    headers={'Referer': self.server}))
 
     def get_info(self):
         """Get information on this Master.
diff --git a/tests/test_jenkins.py b/tests/test_jenkins.py
index 0d60505..afe6f53 100644
--- a/tests/test_jenkins.py
+++ b/tests/test_jenkins.py
@@ -1003,7 +1003,7 @@ class JenkinsTest(unittest.TestCase):
 
         self.assertEqual(
             jenkins_mock.call_args[0][0].get_full_url(),
-            u'http://example.com/queue/item/52/cancelQueue')
+            u'http://example.com/queue/cancelItem?id=52')
 
     @patch.object(jenkins.Jenkins, 'jenkins_open')
     def test_get_node_info(self, jenkins_mock):