在django rest框架响应中删除标头

时间:2018-05-23 16:54:54

标签: django django-rest-framework response-headers

我正在尝试从django rest框架响应中删除Server标头,但我找不到一个简单的方法,所以我创建了一个中间件来删除它。

这是我的第一次尝试:

middleware.py

class RemoveHeaders(object):
    def process_response(self, request, response):
        response['Server'] = ''
        return response

这个中间件工作正常,但问题是它用空字符串填充server标头而不删除它。所以我尝试了下一个:

class RemoveHeaders(object):
    def process_response(self, request, response):
        del response['Server']
        return response

但它不起作用。标题继续server

如何删除server标题?或者您是否知道另一种选择? 感谢

已更新,这些是我的中间件,也许有人覆盖server标题,如果它不存在?

MIDDLEWARE_CLASSES = (
    'corsheaders.middleware.CorsMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'my_api.middleware.RemoveHeaders'
)

1 个答案:

答案 0 :(得分:0)

我只是遇到了完全相同的问题。您使用的方法

del response['Server']

是正确的!

但是,您需要将中间件移到第一个。由于其他中间件将在构造响应后添加标头,因此应用程序的顺序是自下而上的。您的中间件必须是第一个具有“最后一句话”的人。