python Flask更改服务器头

qaxu7uf2  于 2022-11-27  发布在  Python
关注(0)|答案(6)|浏览(199)

我制作了一个简单的 flask 应用程序:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
host:google.be

HTTP/1.0 404 NOT FOUND
Content-Type: text/html
Content-Length: 233
Server: Werkzeug/0.9.6 Python/2.7.6
Date: Mon, 08 Dec 2014 19:15:43 GMT

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.</p>
Connection closed by foreign host.

我想改变的一件事是服务器头,目前它被设置为Werkzeug/0.9.6 Python/2.7.6,我自己选择的东西。但我似乎不能在文档中找到任何关于如何做到这一点。

bmp9r5qi

bmp9r5qi1#

您可以使用Flask的make_response方法来添加或修改头文件。

from flask import make_response

@app.route('/index')
def index():
    resp = make_response("Hello, World!")
    resp.headers['server'] = 'ASD'
    return resp
snvhrwxg

snvhrwxg2#

@bcarroll的答案有效,但它将绕过在原始process_response方法中定义的其他进程,如设置会话cookie。

class localFlask(Flask):
    def process_response(self, response):
        #Every response will be processed here first
        response.headers['server'] = SERVER_NAME
        super(localFlask, self).process_response(response)
        return(response)
piwo6bdm

piwo6bdm3#

您可以通过重写Flask.process_response()方法来更改每个响应的Server头。

from flask import Flask
    from flask import Response

    SERVER_NAME = 'Custom Flask Web Server v0.1.0'

    class localFlask(Flask):
        def process_response(self, response):
            #Every response will be processed here first
            response.headers['server'] = SERVER_NAME
            return(response)

    app = localFlask(__name__)

    @app.route('/')
    def index():
        return('<h2>INDEX</h2>')

    @app.route('/test')
    def test():
        return('<h2>This is a test</h2>')

http://flask.pocoo.org/docs/0.12/api/#flask.Flask.process_response

p1tboqfb

p1tboqfb4#

如果你使用像gunicorn这样的生产服务器,在代码中覆盖服务器头是不起作用的。更好的方法是在gunicorn后面使用代理服务器,并在那里更改服务器头。

a7qyws3x

a7qyws3x5#

**TL;DR -**覆盖/python3.8/http/server.py send_response方法。注解服务器头附加行。
**为什么?**在flask中添加/操作头(以上述任何方式)将触发从flask到Web服务器的带有配置头的响应,但WSGI逻辑(独立发生,在flask逻辑之后和之前)将是最后一个修改这些值的逻辑(如果有)。

在你的例子(Werkzeug)中,一些头文件被硬编码在werkzeug依赖的python http模块中。服务器头文件就是其中之一。

yqyhoc1h

yqyhoc1h6#

轻松的道:

@app.after_request
def changeserver(response):
    response.headers['server'] = SERVER_NAME
    return response

相关问题