ホームページ > バックエンド開発 > Golang > リソース管理を改善するには、Go でリクエストの本文サイズを制限する必要がありますか?

リソース管理を改善するには、Go でリクエストの本文サイズを制限する必要がありますか?

Mary-Kate Olsen
リリース: 2024-12-17 07:52:25
オリジナル
502 人が閲覧しました

Should you Limit Request Body Size in Go for Better Resource Management?

リソース保護のために Golang でのリクエスト本文のサイズを制限する

質問:

のサイズをさらに制限することをお勧めしますか?使用時のフォーム

答え:

はい、リソースの占有を防ぐために、フォーム リクエストのサイズを制限することをお勧めします。デフォルトの制限は 10MB ですが、必要に応じてさらに減らすことができます。

コード:

リクエスト本文のサイズを制限するには、MaxBytesReader 関数を使用します。以下に例を示します。

r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize) 
err := r.ParseForm()
if err != nil {
     // Redirect or set error status code.
     return
}
ログイン後にコピー

エラー処理:

リクエスト本文のサイズが制限を超えると、MaxBytesReader はレスポンスにフラグを設定します。このフラグは、ハンドラーが戻るときにチェックされます。フラグが設定されている場合、サーバーは接続を閉じ、残りのリクエスト本文を読み取りません。したがって、コードでエラーを明示的に処理する必要はありません。

セキュリティに関する考慮事項:

悪意のあるクライアントから保護するには、Server.ReadTimeout、Server.WriteTimeout を設定します。 Server.MaxHeaderBytes も同様です。

グローバルLimit:

すべてのハンドラーにリクエスト本文の制限を設定したい場合は、次のようなカスタム ハンドラーでルート ハンドラーをラップします。

type maxBytesHandler struct {
     h http.Handler
     n int64
 }

func (h *maxBytesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
     r.Body = http.MaxBytesReader(w, r.Body, h.n) 
     h.h.ServeHTTP(w, r)
 }
ログイン後にコピー

次に、ルートをラップします。 ListenAndServe を呼び出すとき、または設定するときのハンドラーserver.

結論:

MaxBytesReader を使用し、適切なセキュリティ構成を適用することで、Go アプリケーションのリクエスト本文のサイズを効果的に制限して、リソースの枯渇を防ぐことができます。

以上がリソース管理を改善するには、Go でリクエストの本文サイズを制限する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート