2011-04-05 60 views
2

我使用的是webpy 0.34,python 2.6.6。我也在使用mimerender。我試圖在我的http響應中包含內容長度,但由於某種原因,標題正在被刪除。我說刪除是因爲我可以創建自定義標頭,並且可以在客戶端上看到這些標頭。但是當我嘗試設置內容長度時,標題永遠不會將其傳遞給客戶端。我試過,包括在web.created對象頭(如圖所示),我已經使用內容長度正在被剝離

web.header('Content-Length', len(data)) 

我在做什麼也嘗試錯誤的和/或不理解這個代碼是如何工作的?

render_json = lambda **args: json.JSONEncoder().encode(args) 

class MyHandler: 
    @mimerender(
      default = 'json', 
      json = render_json, 
      ) 
    def POST(self): 
     data = "abcd" 
     raise web.created(data, headers={'Content-Length': len(data)}) 
+0

注意,你已經得到了錯誤的標籤 - 你使用web.py,但你已經添加了web2py的標籤(它們不是同一個框架)。 – Anthony 2011-04-05 20:51:56

+0

良好的捕獲,謝謝 – ryanday 2011-04-05 21:56:26

回答

3

如果作爲分塊(Transfer-Encoding: chunked),則Content-Length頭必須被省略,as per RFC 2616數據被髮送:

  1. [剪斷]

  2. 如果傳送編碼標題字段(第14.41節)存在且 具有「身份」以外的任何值,則傳輸長度爲 ,定義爲除非通過關閉連接終止消息,否則使用「分塊」傳輸編碼(第3.6節), 。

  3. 如果存在內容長度標頭字段(14.13節),則其OCTET中的其十進制值即 表示實體長度和傳輸長度。如果這兩個長度不同(即,如果存在傳輸編碼 標題字段),則不應發送內容長度標題字段 。如果一個消息同時收到一個 Transfer-Encoding頭域和一個Content-Length頭域, ,後者務必被忽略。

+0

這就是發生了什麼。謝謝! – ryanday 2011-04-05 21:57:22