The Host header is mandatory in HTTP 1.1 (​http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23), however it might happen that older user agents still use the 1.0 protocol with no Host. You can either choose to return an error (400) if you don't want to support those, or use request.META.get('HTTP_HOST') and handle the None value. Django itself is not responsible to guarantee that HTTP_HOST will be filled in all requests.