2015-11-17 89 views
3

如果我有POST請求的基本http處理程序,如果有效負載大於100 KB,如何停止處理?停止處理HTTP POST請求,如果它大於x大小

根據我的理解,在我的POST Handler中,幕後服務器正在流POSTED數據。但是如果我嘗試訪問它,它會阻止正確的? 如果超過100 KB的大小,我想停止處理。

+1

[Here](https://golang.org/pkg/io/#LimitReader)是LimitReader – openwonk

回答

8

使用http.MaxBytesReader來限制從客戶端讀取的數據量。主叫r.ParseForm,r.FormValue或讀取身體的任何其它請求方法之前執行下面這行代碼

r.Body = http.MaxBytesReader(w, r.Body, 100000) 

使用io.LimitedReader包裝請求主體限制了應用程序讀取的數據量,但不一定限制服務器代表應用程序讀取的數據量。

檢查the request content length是不可靠的,因爲當使用分塊編碼時該字段沒有被設置爲實際的請求主體大小。

+0

Yikes的文檔,完全錯過了'http.MaxBytesReader',儘管它從(至少)Go 1.0開始!謝謝,現在需要更新一些我的LimitedReader用例。 – tomasz

-1

我相信你可以簡單地檢查http.Request.ContentLength param,以便在決定是否繼續之前知道發佈的請求的大小,或者如果大於預期返回錯誤。