2013-07-04 76 views
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 

回答

0

你不需要再擔心刪除/添加/更改Content-Length頭,這將是自由服務器處理時,它發出的響應。發送錯誤的長度標題可能會給您的網站瀏覽者/互聯網瀏覽器帶來問題。

您可以測試這裏的內容長度的頭 - http://www.dekho-ji.com/website-diagnostics-curl-http-request-response-headers-online

+0

好吧,我不太清楚。 Werkzeug開發服務器沒有添加任何內容長度標題,也沒有糾正錯誤的內容長度。所以我絕對應該從我的迴應中刪除錯誤的內容。 儘管如此,操縱內容後操縱標題的問題仍然存在。 WSGI中間件似乎不提供這種可能性,這似乎很奇怪。 – room2web

+0

看到這張貼SO添加HTTP標頭WSGI中間件 - http://stackoverflow.com/questions/3859097/how-to-add-http-headers-in-wsgi-middleware –

+0

我讀的文章。問題是,標頭在start_unpack_data而內容被調用的應用程序(它調用start_unpack_data)之後操縱哪個呼叫被進一步調出的中間件棧操作。因此,在start_unpack_data有沒有可能建立依賴於內容操縱在同一中間件成果頭。 – room2web