0
後設置在WSGI中間件相應的HTTP Content-Length頭我有一箇中間件在基於WERKZEUG應用程序設置的話對我來說(尤其是逃逸的字符串,對基於角REST前綴JSON一些JSON逃逸,操縱-客戶)。操作內容
我想保留中間件層的整個邏輯,不要添加任何技巧到我的基本視圖類或我的基本應用程序。
因爲我中間件操縱我剝去頭的Content-Length頭的內容,但我想是一個很好的網友和客戶端提供的信息。
不幸的是,在我操縱內容的地方,似乎沒有辦法調整標題了。我是否必須在管道之後進一步做這件事?在它周圍包裹第二個中間件?
下面的代碼到中間件:
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
好吧,我不太清楚。 Werkzeug開發服務器沒有添加任何內容長度標題,也沒有糾正錯誤的內容長度。所以我絕對應該從我的迴應中刪除錯誤的內容。 儘管如此,操縱內容後操縱標題的問題仍然存在。 WSGI中間件似乎不提供這種可能性,這似乎很奇怪。 – room2web
看到這張貼SO添加HTTP標頭WSGI中間件 - http://stackoverflow.com/questions/3859097/how-to-add-http-headers-in-wsgi-middleware –
我讀的文章。問題是,標頭在start_unpack_data而內容被調用的應用程序(它調用start_unpack_data)之後操縱哪個呼叫被進一步調出的中間件棧操作。因此,在start_unpack_data有沒有可能建立依賴於內容操縱在同一中間件成果頭。 – room2web