def set_response(self):
        """Modify ``cherrypy.response`` to represent ``self``.

        Modifies status, headers, and body.

        CherryPy uses this internally, but you can also use it to create
        an HTTPRedirect object and set its output without *raising* the
        exception.
        """
        response = cherrypy.serving.response
        response.status = status = self.status

        if status in (300, 301, 302, 303, 307, 308):
            response.headers['Content-Type'] = 'text/html;charset=utf-8'
            # "The ... URI SHOULD be given by the Location field
            # in the response."
            response.headers['Location'] = self.urls[0]

            # "Unless the request method was HEAD, the entity of the response
            # SHOULD contain a short hypertext note with a hyperlink to the
            # new URI(s)."
            msg = {
                300: 'This resource can be found at ',
                301: 'This resource has permanently moved to ',
                302: 'This resource resides temporarily at ',
                303: 'This resource can be found at ',
                307: 'This resource has moved temporarily to ',
                308: 'This resource has been moved to ',
            }[status]
            msg += '<a href=%s>%s</a>.'
            msgs = [
                msg % (saxutils.quoteattr(u), html.escape(u, quote=False))
                for u in self.urls
            ]
            response.body = ntob('<br />\n'.join(msgs), 'utf-8')
            # Previous code may have set C-L, so we have to reset it
            # (allow finalize to set it).
            response.headers.pop('Content-Length', None)
        elif status == 304:
            # Not Modified.
            # "The response MUST include the following header fields:
            # Date, unless its omission is required by section 14.18.1"
            # The "Date" header should have been set in Response.__init__

            # "...the response SHOULD NOT include other entity-headers."
            for key in (
                'Allow',
                'Content-Encoding',
                'Content-Language',
                'Content-Length',
                'Content-Location',
                'Content-MD5',
                'Content-Range',
                'Content-Type',
                'Expires',
                'Last-Modified',
            ):
                if key in response.headers:
                    del response.headers[key]

            # "The 304 response MUST NOT contain a message-body."
            response.body = None
            # Previous code may have set C-L, so we have to reset it.
            response.headers.pop('Content-Length', None)
        elif status == 305:
            # Use Proxy.
            # self.urls[0] should be the URI of the proxy.
            response.headers['Location'] = ntob(self.urls[0], 'utf-8')
            response.body = None
            # Previous code may have set C-L, so we have to reset it.
            response.headers.pop('Content-Length', None)
        else:
            raise ValueError('The %s status code is unknown.' % status)
Modify ``cherrypy.response`` to represent ``self``.

        Modifies status, headers, and body.

        CherryPy uses this internally, but you can also use it to create
        an HTTPRedirect object and set its output without *raising* the
        exception.
        
cherrypy/_cperror.py