zoukankan      html  css  js  c++  java
  • 解决Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx' to ALLOWED_HOSTS!

    一、问题描述

    在启动django的服务器时,报错如下图:

    二、问题分析

    ALLOWED_HOSTS

    Default:[](Empty list)

    ALLOWED_HOSTS是一个字符串列表,代表了这个Django网站可以服务的主机名或域名。这是为了阻止HTTP Host头攻击而采用的一种安全措施,这种攻击即使在很多看上去很安全的服务器配置下依然能够成功。

    这个列表中的值,可以是全名(比如: 'www.example.com'), 在这种情况下,它们会直接与所要求的Host头进行匹配(大小写不区分,不包括端口号)。如果一个值以点号开始,则可当做一个子域名通配符:'.example.com'会匹配'example.com', 'www.example.com', 以及example.com的其它任意子域名。如果有'*'这个值,那么它会匹配任何字符串,在这种情况下,你就需要提供你自己的Host头验证机制(可能是在一个中间件中;如果真是这样,那么这个中间件就必须放在MIDDLEWARE列表的第一位)

    Django也支持任一条目的域名全称。有一些浏览器在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头,那么你就绕开了这一层安全保护。

    三、解决问题

    • 修改创建项目时生成的setting.py文件

      ALLOWED_HOSTS = []改为ALLOWED_HOSTS = ['*']

      再次运行即可成功访问。

  • 相关阅读:
    #Leetcode# 700. Search in a Binary Search Tree
    很多很多书上代码
    #Leetcode# 104. Maximum Depth of Binary Tree
    #Leetcode# 12. Integer to Roman
    PAT-2018年冬季考试-乙级
    PAT 1035 插入与归并
    PAT 1058 选择题
    PAT 1052 卖个萌
    CodeForces Round #521 (Div.3) E. Thematic Contests
    2017Nowcoder Girl初赛重现赛
  • 原文地址:https://www.cnblogs.com/JIM-FAN/p/14679629.html
Copyright © 2011-2022 走看看