」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 請求 Iris 的正文限制中間件

請求 Iris 的正文限制中間件

發佈於2024-11-08
瀏覽:511

Request Body Limit Middleware for Iris

概述

Iris Body Limit 中間件是一個強大的工具,用於控制 Iris Web 應用程式中傳入請求正文的大小。透過設定請求正文的大小限制,您可以防止用戶端發送過大的負載,否則可能會壓垮您的伺服器或導致拒絕服務 (DoS) 攻擊。此中間件對於處理檔案上傳、JSON 有效負載或任何其他類型的大小可能變化很大的資料的應用程式特別有用。

為什麼要使用 Body Limit 中間件?

安全

使用主體限制中間件的主要原因之一是增強應用程式的安全性。透過限制傳入請求正文的大小,您可以降低 DoS 攻擊的風險,攻擊者會發送大量有效負載以耗盡伺服器資源。

表現

限制請求正文的大小還可以提高應用程式的效能。大型有效負載可能會消耗大量記憶體和處理能力,從而降低伺服器速度並影響使用者體驗。透過設定合理的限制,您可以確保您的伺服器保持回應速度和高效率。

資源管理

在處理文件上傳或大型 JSON 負載的應用程式中,有效管理資源至關重要。透過設定正文限制,您可以防止客戶端上傳過大的檔案或發送巨大的 JSON 對象,從而導致伺服器資源緊張。

安裝

要使用 bodylimit 中間件,您需要將其匯入 Iris 應用程式:

import "github.com/kataras/iris/v12/middleware/bodylimit"

用法

基本設定

要使用身體限制中間件,您需要建立一個Iris應用程式並註冊中間件。以下是如何設定中間件限制為 2 MB 的範例:

package main

import (
    "github.com/kataras/iris/v12"
    "github.com/kataras/iris/v12/middleware/bodylimit"
)

func main() {
    app := iris.New()
    app.Use(bodylimit.New(2 * iris.MB)) // set the limit to 2 MB.

    handler := func(ctx iris.Context) {
        body, err := ctx.Body()
        if err != nil {
            ctx.StopWithPlainError(iris.StatusInternalServerError, err)
            return
        }

        ctx.Write(body) // write the request body back to the client.
    }

    app.Post("/", handler)
    app.Listen(":8080")
}

解釋

  • Limit:bodylimit.New 函數採用單一參數,此參數是請求正文的最大大小(以位元組為單位)。在上面的範例中,限制設定為 10 個位元組。
  • Handler:處理程序讀取請求正文並將其寫迴回應。如果請求體超出限制,中間件將停止請求並返回 413 Request Entity Too Large 狀態。
  • 正文限制中間件使用sync.Pool來管理Reader實例,這些實例用於讀取請求正文並強制執行大小限制。這種方法確保了記憶體的高效使用,並減少了為每個請求建立新 Reader 實例的開銷。

使用 BodyLimit 中介軟體測試處理程序

要測試使用 BodyLimit 中間件的處理程序,您可以使用 Iris 提供的 httptest 套件。以下是如何測試處理程序的範例:

package main_test

import (
    "testing"

    "github.com/kataras/iris/v12"
    "github.com/kataras/iris/v12/httptest"
    "github.com/kataras/iris/v12/middleware/bodylimit"
)

func TestBodyLimit(t *testing.T) {
    limit := int64(10) // set the limit to 10 bytes for the shake of the test.

    handler := func(ctx iris.Context) {
        body, err := ctx.Body()
        if err != nil {
            ctx.StopWithPlainError(iris.StatusInternalServerError, err)
            return
        }
        ctx.Write(body)
    }

    app := iris.New()
    app.Use(bodylimit.New(limit))
    app.Post("/", handler)

    e := httptest.New(t, app)

    // Test with a body that is smaller than the limit.
    e.POST("/").WithText("123456789").Expect().Status(iris.StatusOK).Body().IsEqual("123456789")

    // Test with a body that is equal to the limit.
    e.POST("/").WithText("1234567890").Expect().Status(iris.StatusOK).Body().IsEqual("1234567890")

    // Test with a body that is bigger than the limit.
    e.POST("/").WithText("12345678910").Expect().Status(iris.StatusRequestEntityTooLarge)
}

結論

Iris Body Limit 中間件提供了一種簡單而有效的方法來控制 Iris Web 應用程式中傳入請求正文的大小。透過設定請求正文的大小限制,您可以增強應用程式的安全性、效能和資源管理。此中間件具有易於整合和高級功能,對於任何 Iris 開發人員來說都是一個有價值的工具。

版本聲明 本文轉載於:https://dev.to/kataras/request-body-limit-middleware-for-iris-4999?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • JavaScript DOM 與 BOM!
    JavaScript DOM 與 BOM!
    DOM DOM 代表文檔物件模型,代表網頁。這允許程式操縱文件結構、樣式和內容。 const listDiv = document.getElementById("list-div"); listDiv.classList.add('new-class'); listDiv.cl...
    程式設計 發佈於2024-11-08
  • 綁定和模板:Peasy-UI 系列的一部分
    綁定和模板:Peasy-UI 系列的一部分
    Table of Contents Introduction Bindings and the Template Text Bindings Basic Binding Conditional Boolean Text B...
    程式設計 發佈於2024-11-08
  • 實現介面
    實現介面
    定義介面後,一個或多個類別可以實現它。 要實作接口,請在類別定義中使用 Implements 子句。 該類別必須實作介面所需的所有方法。 包含 Implements 子句的類別的一般形式是: 類別類別名稱擴展超類別實作介面{ // 類體 } 若要實作多個接口,接口之間用逗號分隔。 ...
    程式設計 發佈於2024-11-08
  • 檢查 Effect-TS 選項中的元素:實用指南
    檢查 Effect-TS 選項中的元素:實用指南
    Effect-TS 提供了檢查 Option 是否包含特定值的方法。這些函數允許您使用自訂等價函數或預設等價來確定選項中是否存在值。在本文中,我們將探討用於檢查選項中元素的兩個關鍵函數:O.containsWith 和 O.contains. 範例 1:使用 O.containsWi...
    程式設計 發佈於2024-11-08
  • Python 物件導向程式設計簡介
    Python 物件導向程式設計簡介
    Python 编程语言 Python 是一种解释型、面向对象的编程语言。由于其高级内置数据结构和动态类型,它在快速开发新应用程序以及编写脚本代码以组合用不同语言编写的现有组件方面很受欢迎。 Python简单易学的语法强调可读性,从而降低了长期程序维护的成本和复杂性。它支持各种包含代...
    程式設計 發佈於2024-11-08
  • 最佳軟體比較中的頂級數據科學工具
    最佳軟體比較中的頂級數據科學工具
    介绍 到 2024 年,数据科学将通过使用复杂的分析、人工智能和机器学习推动决策,继续改变业务。随着对熟练数据科学家的需求不断增加,对能够加快操作、提高生产力并提供可靠见解的强大工具的需求也在增加。但是,有这么多可用的选项,目前哪种软件最适合专业人士? 这项比较研究探讨了 2024...
    程式設計 發佈於2024-11-08
  • 我如何將應用程式效能提高到
    我如何將應用程式效能提高到
    ⌛ 回顾时间 在我的上一篇博客中,我谈到了如何在短短 2 周内将应用程序大小从 75MB 减少到 34MB(查看!)。但这还不是全部,我还将我们应用程序的整体性能提高了 80%?. 让我们来看看如何!! ?传说 经过简单的一轮浏览后,我发现我们的应用程序中存在一些导...
    程式設計 發佈於2024-11-08
  • 為什麼 MySQL 會拋出「警告:mysql_fetch_assoc 參數無效」錯誤?
    為什麼 MySQL 會拋出「警告:mysql_fetch_assoc 參數無效」錯誤?
    MySQL 警告:mysql_fetch_assoc 的參數無效問題:嘗試從MySQL 檢索資料時資料庫時,遇到以下錯誤訊息:mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource解釋:The mysql...
    程式設計 發佈於2024-11-08
  • Django 查詢集可以透過模型屬性過濾嗎?
    Django 查詢集可以透過模型屬性過濾嗎?
    按模型屬性過濾 Django 查詢集Django 模型上的查詢通常使用標準過濾器根據預定義字段值選擇特定實例。但是,如果您需要根據模型中定義的自訂屬性進行過濾,該怎麼辦? 您可以透過模型屬性篩選查詢集嗎? 不幸的是,Django 的過濾器主要運行在資料庫級別,將它們轉換為 SQL 命令以有效地檢索資...
    程式設計 發佈於2024-11-08
  • 儘管配置正確,為什麼我無法在 Laravel 中發送 TLS 電子郵件?
    儘管配置正確,為什麼我無法在 Laravel 中發送 TLS 電子郵件?
    無法發送TLS 電子郵件:解決Laravel 證書驗證錯誤儘管啟用了不太安全的Gmail 設定並正確配置了Laravel 的.env 文件,您在傳送TLS 電子郵件時遇到憑證驗證失敗。錯誤訊息表示 SSL 操作失敗且無法驗證伺服器憑證。 要解決此問題,如果您的作業系統沒有自動管理受信任的憑證儲存區,...
    程式設計 發佈於2024-11-08
  • 使用 Wasmtime 和 Wasm3 將 Golang 編譯為 Wasm 時出現錯誤如何解決?
    使用 Wasmtime 和 Wasm3 將 Golang 編譯為 Wasm 時出現錯誤如何解決?
    使用Wasmtime 和Wasm3 將Golang 編譯為Wasm 時出現錯誤使用GOOS=js 將Golang 程式碼編譯為WebAssembly (WARCasm) GO =wasm go使用Wasmtime 或Wasm3 執行時,build -o main.wasm 可能會導致錯誤。讓我們調查...
    程式設計 發佈於2024-11-08
  • 如何存取 Iframe 的當前位置?
    如何存取 Iframe 的當前位置?
    訪問iframe 的當前位置:挑戰和解決方法跨源資源共享(CORS) 法規在嘗試檢索iframe 時帶來了重大挑戰iframe 的當前位置。此安全措施可防止駐留在不同來源的 JavaScript 程式碼直接存取頁面的 URL。 雖然使用JavaScript 存取iframe 的URL 不可行,但有其...
    程式設計 發佈於2024-11-08
  • Spring Security 與 JWT
    Spring Security 與 JWT
    In this article, we will explore how to integrate Spring Security with JWT to build a solid security layer for your application. We will go through ea...
    程式設計 發佈於2024-11-08
  • Google Sheets:如何花數小時建立 SUMIFS
    Google Sheets:如何花數小時建立 SUMIFS
    大家好!今天我想分享一个我创建的超级有用的脚本,用于解决日常生活中的常见问题。 如果您曾经尝试在 Google 表格中对“持续时间”求和,您可能已经注意到,SUMIF 和 SUMIFS 公式无法根据特定条件对事件或产品的持续时间求和。根据您需要执行的计算类型,这可能会成为一个障碍。但别担心! Goo...
    程式設計 發佈於2024-11-08
  • 如何將 Boehm 的垃圾收集器與 C++ 標準函式庫整合?
    如何將 Boehm 的垃圾收集器與 C++ 標準函式庫整合?
    整合 Boehm 垃圾收集器和 C 標準庫要將 Boehm 保守垃圾收集器與 C標準庫集合無縫集成,有兩種主要方法:重新定義運算符::new此方法涉及重新定義運算符::new以使用Boehm的GC。但是,它可能與現有 C 程式碼衝突,並且可能無法在不同編譯器之間移植。 明確分配器參數您可以使用而不是...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3