7

When running a CherryPy app it will send server name tag something like CherryPy/version. Is it possible to rename/overwrite that from the app without modifying CherryPy so it will show something else?

Maybe something like MyAppName/version (CherryPy/version)

4

3 に答える 3

10

これは、構成ファイル/dictでアプリケーションごとに設定できるようになりました

[/]  
response.headers.server = "CherryPy Dev01"
于 2013-02-23T00:29:50.590 に答える
5

実際に彼らの公式チャンネルfumanchuでIRCに尋ねると、これを行うためのよりクリーンな方法が得られました(最新のsvnを使用):

import cherrypy
from cherrypy import _cpwsgi_server 
class HelloWorld(object):
    def index(self):
        return "Hello World!"
    index.exposed = True

serverTag = "MyApp/%s (CherryPy/%s)" % ("1.2.3", cherrypy.__version__)
_cpwsgi_server.CPWSGIServer.environ['SERVER_SOFTWARE'] = serverTag
cherrypy.config.update({'tools.response_headers.on': True,
                        'tools.response_headers.headers': [('Server', serverTag)]})
cherrypy.quickstart(HelloWorld())
于 2008-10-16T14:31:55.973 に答える
4

この文字列は、CherrPyResponseクラスで設定されているようです

def __init__(self):
  self.status = None
  self.header_list = None
  self._body = []
  self.time = time.time()

  self.headers = http.HeaderMap()
  # Since we know all our keys are titled strings, we can
  # bypass HeaderMap.update and get a big speed boost.
  dict.update(self.headers, {
    "Content-Type": 'text/html',
    "Server": "CherryPy/" + cherrypy.__version__,
    "Date": http.HTTPDate(self.time),
  })

したがって、Responseオブジェクトを作成するときに、「Server」ヘッダーを更新して目的の文字列を表示できます。CherrPy応答オブジェクトのドキュメントから:

ヘッダー

応答のヘッダーを含む辞書。このdictには、ファイナライズフェーズの前であればいつでも値を設定できます。その後、CherryPyはheader_listの使用に切り替えます...

編集:作成するすべての応答オブジェクトでこの変更を行う必要がないようにするために、これを回避する簡単な方法の1つは、応答オブジェクトをラップすることです。たとえば、CherryPyのResponseを継承し、初期化後にヘッダーキーを更新する独自のResponseオブジェクトを作成できます。

class MyResponse(Response):

    def __init__(self):
        Response.__init__(self)
        dict.update(self.headers, {
            "Server": "MyServer/1.0",
        })

RespObject = MyResponse()
print RespObject.headers["Server"]

次に、Responseオブジェクトを作成する必要がある場所で使用するためにオブジェクトを呼び出すことができ、サーバーヘッダーは常に目的の文字列に設定されます。

于 2008-09-25T20:00:15.887 に答える