默認值:[](空列表)
**ALLOWED_HOSTS**是一個字符串列表,代表了這個Django網站可以服務的主機名或域名。這是為了阻止[HTTP Host頭攻擊](https://docs.djangoproject.com/en/1.10/topics/security/#host-headers-virtual-hosting)而采用的一種安全措施,這種攻擊即使在很多看上去很安全的服務器配置下依然能夠成功。
這個列表中的值,可以是全名(比如: **'www.example.com'**), 在這種情況下,它們會直接與所要求的Host頭進行匹配(大小寫不區分,不包括端口號)。如果一個值以點號開始,則可當做一個子域名通配符:**'.example.com'**會匹配**'example.com', 'www.example.com'**, 以及**example.com**的其它任意子域名。如果有'\*'這個值,那么它會匹配任何字符串,在這種情況下,你就需要提供你自己的Host頭驗證機制(可能是在一個中間件中;如果真是這樣,那么這個中間件就必須放在[MIDDLEWARE](https://docs.djangoproject.com/en/1.10/ref/settings/#std:setting-MIDDLEWARE)列表的第一位)
Django也支持任一條目的[域名全稱](https://en.wikipedia.org/wiki/Fully_qualified_domain_name)。有一些瀏覽器在Host頭中會包含一個結尾點號,Django在執行host驗證時會過濾掉它。
如果Host頭(如果啟用了**USE_X_FORWARDED_HOST**,則是**X-Forwarded-Host**)不匹配列表中任何一個值,那么 **django.http.HttpRequest.get_host()**方法會拋出**SuspiciousOperation**異常。
當**DEBUG**設為**True**,且**ALLOWED_HOSTS**為空時,會使用**['localhost', '127.0.0.1', '[::1]']**來驗證Host頭。
這個驗證只會通過get_host()方法來執行,如果你的代碼是通過request.META直接訪問Host頭,那么你就繞開了這一層安全保護。
>[warning] 在老的Django版本中,如果DEBUG=True,ALLOWED_HOSTS將不會被檢查。這在Django 1.9.11和Django 1.8.16版本中被改變,也是為了阻止一種DNS重綁定攻擊