1

Werkzeug ベースのアプリにミドルウェアをセットアップして、JSON のエスケープと操作を行います (特に、Angular ベースの REST クライアントのエスケープ文字列を JSON の前に付けます)。

ロジック全体をミドルウェア レイヤーに保持し、ベース ビュー クラスやベース アプリにトリックを追加したくありません。

私のミドルウェアはコンテンツを操作するので、ヘッダーから Content-Length ヘッダーを取り除きますが、良いネチズンになってクライアントにその情報を提供したいと考えています。

残念ながら、コンテンツを操作した時点で、ヘッダーを調整する方法はもうないようです。パイプラインのさらに下でこれを行う必要がありますか? 2 番目のミドルウェアをラップしますか?

ミドルウェアのコードは次のとおりです。

class ContentManipulatingMiddle(object):
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        app = self.app

        def start_unpack_data(status, response_headers, exc_info=None):
            # we need to strip content-length
            response_headers = [ (name, value)
                for name, value in response_headers
                if name.lower() != 'content-length' ]

            return start_response(status, response_headers, exc_info)

        app_iter = app(environ, start_unpack_data)

        data = []
        for item in app_iter:
            # do some content manipulation
            data.append(manipulate_content(item))

        # content length has changed, i should reset the content-length header
        # but at this point, how?

        return data
4

2 に答える 2

0

content-length ヘッダーの削除/追加/変更について心配する必要はありません。これは、サーバーが応答を送信するときにサーバーによって自動的に処理されます。間違った長さのヘッダーを送信すると、Web サイトの閲覧者やインターネット ブラウザーに問題が生じる可能性があります。

ここで Content-length ヘッダーをテストできます - http://www.dekho-ji.com/website-diagnostics-curl-http-request-response-headers-online

于 2013-07-04T14:41:16.253 に答える