Opened 4 years ago

Last modified 4 years ago

#5475 defect new

twisted.web.server.Request does not honor Host HTTP headers

Reported by: orestis Owned by:
Priority: normal Milestone:
Component: web Keywords:
Cc: jknight Branch:
Author: Launchpad Bug:

Description (last modified by exarkun)

When a twisted web server is placed behind a proxy, requests should honor the proxy-set Host: header in order to set the hostname and port at _prePathURL.

Current behavior picks up the correct hostname, but use the internal listening port, instead of the proxy-used listening port. In my particular instance, this breaks an athena-powered service when placed behind a proxy.

A patch is floating on the twisted-web mailing list:

Pasted here for reference, original author Richard Wall:

  • home/richard/lib/Twisted/trunk/twisted/web/

    342342        return self.session
    344344    def _prePathURL(self, prepath):
    345         port = self.getHost().port
    346345        if self.isSecure():
    347346            default = 443
    348347        else:
    349348            default = 80
     350        # There won't always be a hostheader, but if it's present, try and find
     351        # the port number from it.
     352        hostheader = self.getHeader('host')
     353        if hostheader:
     354            hostheader = hostheader.split(":", 1)
     355            if len(hostheader) == 2:
     356                port = int(hostheader[1])
     357            else:
     358                port = default
     359        else:
     360            port = self.getHost().port
    350362        if port == default:
    351363            hostport = ''
    352364        else:

The current twisted literature suggests using a VHostMonsterResource, but this feels clunky. If it covers any additional use-cases that using Host: doesn't, it should explain so in the documentation.

Change History (3)

comment:1 Changed 4 years ago by DefaultCC Plugin

  • Cc jknight added

comment:2 Changed 4 years ago by thijs

  • Description modified (diff)

comment:3 Changed 4 years ago by exarkun

  • Description modified (diff)
Note: See TracTickets for help on using tickets.