Как запретить Gunicorn возвращать HTTP-заголовок сервера?
Я хотел бы замаскировать версию или вообще удалить заголовок.
Ответы
Ответ 1
Чтобы изменить http-заголовок сервера: http в файле conf.py:
import gunicorn
gunicorn.SERVER_SOFTWARE = 'Microsoft-IIS/6.0'
И используйте вызов по строкам gunicorn -c conf.py wsgi:app
Чтобы удалить заголовок в целом, вы можете использовать gunicorn для обезьян-патча, заменив его класс ответа HTTP на подкласс, который отфильтровывает заголовок. Это может быть безвредным, но, вероятно, не рекомендуется. В conf.py введите следующее:
from gunicorn.http import wsgi
class Response(wsgi.Response):
def default_headers(self, *args, **kwargs):
headers = super(Response, self).default_headers(*args, **kwargs)
return [h for h in headers if not h.startswith('Server:')]
wsgi.Response = Response
Протестировано с пулеметами 18
Ответ 2
Вы можете отредактировать __init__.py, чтобы установить SERVER_SOFTWARE в любое удобное для вас время. Но мне бы очень хотелось отключить это с помощью флага, поэтому мне не нужно было повторно использовать патч при обновлении.
Ответ 3
Мое бесплатное решение, включающее использование метода default_headers:
import gunicorn.http.wsgi
from six import wraps
def wrap_default_headers(func):
@wraps(func)
def default_headers(*args, **kwargs):
return [header for header in func(*args, **kwargs) if not header.startswith('Server: ')]
return default_headers
gunicorn.http.wsgi.Response.default_headers = wrap_default_headers(gunicorn.http.wsgi.Response.default_headers)
Ответ 4
Лучше изменить его на что-то уникальное, чем удалить его. Вы не хотите рисковать, например, пауки думают, что вы не соблюдаете требования. Изменение его на название программного обеспечения, которое вы не используете, может вызвать аналогичные проблемы. Сделав его уникальным, вы предотвратите подобные предположения. Я рекомендую что-то вроде этого:
import gunicorn
gunicorn.SERVER_SOFTWARE = 'intentionally-undisclosed-gensym384763'