Heim Web-Frontend js-Tutorial Die Grundlagen der Ratenbegrenzung: Wie sie funktioniert und wie man sie nutzt

Die Grundlagen der Ratenbegrenzung: Wie sie funktioniert und wie man sie nutzt

Nov 04, 2024 am 06:27 AM

Ratenbegrenzung ist ein wichtiges Konzept in der Webentwicklung. Es gewährleistet Serverstabilität, effiziente Ressourcenzuweisung und Schutz vor böswilligen Angriffen. In diesem Artikel befassen wir uns mit dem Wesen der Ratenbegrenzung, ihrer Bedeutung, verschiedenen Implementierungsmethoden und praktischen Beispielen, um ihre Funktionalität zu demonstrieren. Lasst uns gleich eintauchen?

Was ist Ratenbegrenzung?

Ratenbegrenzung ist eine Strategie, die verwendet wird, um die Menge eingehender Anfragen oder Datenverkehr an einen Webdienst oder einen Server zu steuern. Es hilft, Ihre Anwendungen vor Missbrauch zu schützen, sorgt für eine faire Ressourcenverteilung und sorgt für die Stabilität des Dienstes.

Warum Ratenbegrenzung verwenden?

Hier sind einige der Gründe, warum Sie eine Ratenbegrenzung verwenden sollten ??

  • Missbrauch verhindern: Verhindert, dass Bots oder böswillige Benutzer den Server mit Anfragen überlasten.
  • Ressourcenverwaltung: Stellt eine faire Nutzung der Ressourcen für alle Benutzer sicher.
  • Sicherheit: Verhindert Brute-Force-Angriffe, indem die Versuche einiger Endpunkte in Ihrer Anwendung begrenzt werden.
  • Kostenkontrolle: Hilft, unerwartete Kosten aufgrund übermäßiger API-Aufrufe zu verhindern.
  • Leistung: Sorgt dafür, dass Ihr Server reaktionsfähig bleibt und das Risiko von Ausfallzeiten verringert wird.

Arten der Ratenbegrenzung

  1. Festes Fenster (oder einfache) Ratenbegrenzung: Diese Methode begrenzt Anfragen innerhalb eines festen Zeitfensters. Beispiel: „100 Anfragen pro Minute.“
  2. Sliding Window Rate Limiting: Ein dynamischer Zeitrahmen, der Anfragen über einen aktuellen Zeitraum, beispielsweise die letzten paar Minuten oder Sekunden, verfolgt und begrenzt.
  3. Token-Bucket-Algorithmus: Diese Methode verwendet einen mit Tokens gefüllten „Bucket“, um Anfragen zu verwalten. Jede eingehende Anfrage verbraucht ein Token und der Bucket wird in festgelegten Intervallen wieder aufgefüllt. Dieser Ansatz ermöglicht Verkehrsstöße unter Beibehaltung einer allgemeinen Ratenbegrenzung.
  4. Leaky-Bucket-Algorithmus: Ähnlich dem Token-Bucket, aber mit einer Wendung. Wenn der Eimer voll ist, „lecken“ überschüssige Anfragen aus oder werden verworfen, wodurch ein stetiger Fluss aufrechterhalten wird.

? Ich werde nicht einmal lügen, denn ich weiß nicht viel über die Algorithmen Token Bucket und Leaky Bucket, da ich sie für meine aktuellen Projekte nicht benötigt habe. Allerdings sind feste Fenster und Schiebefenster die häufigsten Typen, denen Sie begegnen werden. Beispielsweise verwendet GPT-4 von OpenAI eine feste Fensterratenbegrenzung mit abgestuften Grenzwerten – die erste Stufe erlaubt 500 Anfragen pro Minute. Dieser Ansatz kann zu einem Burst-Verkehr führen, da Benutzer möglicherweise ihr Limit erreichen, kurz bevor das Fenster zurückgesetzt wird.

So funktioniert die Ratenbegrenzung

Der Prozess umfasst normalerweise:

  1. Tracking: Überwachen, wie viele Anfragen ein Benutzer (hauptsächlich die Benutzer-ID) oder IP innerhalb eines bestimmten Zeitraums gestellt hat.
  2. Schwellenwert: Definieren eines Grenzwerts (z. B. 100 Anfragen pro Stunde).
  3. Antwort: Senden einer Warnung oder Blockieren weiterer Anfragen, wenn das Limit überschritten wird (normalerweise mit dem HTTP-Statuscode 429 Too Many Requests).

Ratenbegrenzung implementieren: Praktische Beispiele

Da Sie nun ein grundlegendes Verständnis der Ratenbegrenzung und ihrer Funktionsweise haben, machen wir uns die Hände schmutzig, indem wir sie in einem Projekt implementieren, das wir erstellen werden.

Wir erstellen zwei Projekte, die die Ratenbegrenzung demonstrieren:

  1. Ein GET-Anfragebeispiel
  2. Ein POST-Anfragebeispiel

Tech-Stack

  • Frontend: Reagieren (mit Vite)
  • Backend: Express (Node.js-Framework)

GET-Anfragebeispiel

Erstellen Sie einen Ordner mit einem beliebigen Namen Ihrer Wahl und öffnen Sie ihn in VS-Code oder einem anderen Code-Editor, den Sie verwenden.

Erstellen Sie in dem von Ihnen erstellten Ordner zwei weitere Ordner mit den Namen „Frontend“ und „Backend“.

Danach gehen Sie in die Backend-Ordner und geben den Befehl npm init -y ein, um eine package.json-Datei zu initialisieren

Danach installieren Sie die folgenden npm-Pakete im Backend-Ordner ??

npm install express cors express-rate-limit

npm install -D nodemon
Nach dem Login kopieren
Nach dem Login kopieren

Was diese bewirken:

  • express: Erstellt Ihren Webserver und verwaltet API-Routen
  • cors: Ermöglicht dem Frontend die sichere Kommunikation mit dem Backend
  • Express-Rate-Limit: Schützt Ihre API vor zu vielen Anfragen
  • nodemon: Startet den Server während der Entwicklung automatisch neu (deshalb verwenden wir D)

Danach erstellen Sie eine index.js-Datei (Sie können diese beliebig verwenden), da wir sie zum Einrichten des Ratenbegrenzers verwenden werden.

Nachdem Sie diesen Code kopiert und eingefügt haben, werde ich ihn gleich erklären

const express = require("express");
const rateLimit = require("express-rate-limit");

const app = express();

// Set up rate limiter: 100 requests per 15 minutes
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 5, // Limit each IP to 5 requests per `window` (here, per 15 minutes)
  message: "Too many requests from this IP, please try again later.",
});

// Apply the rate limiting middleware to all requests
app.use(limiter);

app.get("/api/data", (req, res) => {
  res.send("Welcome to the API!");
});

app.listen(5000, () => {
  console.log("Server running on http://localhost:5000");
});
Nach dem Login kopieren
Nach dem Login kopieren

Hier ist, was jeder Teil bewirkt:

  1. Die ersten beiden Zeilen importieren unsere benötigten Pakete
  2. app = express() erstellt unseren Server
  3. Der Begrenzer ist konfiguriert mit:
    • windowMs: Legt ein 15-minütiges Zeitfenster fest (15 × 60 × 1000 Millisekunden)
    • max: Erlaubt 5 Anfragen pro IP-Adresse in diesem Fenster
    • Nachricht: Die Fehlermeldung, die Benutzern angezeigt wird, wenn sie das Limit überschreiten

Dann:

  1. app.use(limiter) wendet unser Ratenlimit auf alle Routen an
  2. Wir erstellen eine einfache Testroute unter „/api/data“, die eine Willkommensnachricht sendet
  3. Zuletzt starten wir den Server auf Port 5000

Wenn Benutzer innerhalb von 15 Minuten mehr als 100 Mal von derselben IP aus auf Ihre API zugreifen, erhalten sie die Fehlermeldung, anstatt auf die API zuzugreifen.

Da Sie nun wissen, wie es funktioniert, möchten wir den automatischen Neustart durch Hinzufügen zu package.json ??
aktivieren

 {
  "scripts": {
    "dev": "nodemon index.js"
  }
}
Nach dem Login kopieren
Nach dem Login kopieren

Das ist alles für das Backend.

Es ist Zeit, das Frontend einzurichten.

  • Öffnen Sie ein neues Terminal, legen Sie eine CD in den Frontend-Ordner und führen Sie ?? aus.
npm install express cors express-rate-limit

npm install -D nodemon
Nach dem Login kopieren
Nach dem Login kopieren
  • Gehen Sie die folgenden Anweisungen durch und ich rate Ihnen, JavaScript auszuwählen, wenn Sie sich mit Typoskript nicht auskennen
  • Sie können ein wenig aufräumen, indem Sie einige Dateien entfernen, die Sie nicht benötigen. So sieht meiner aus

The Basics of Rate Limiting: How It Works and How to Use It

  • Sobald Sie fertig sind, öffnen Sie App.jsx und fügen Sie diesen Code ein, den ich erläutern werde ??
const express = require("express");
const rateLimit = require("express-rate-limit");

const app = express();

// Set up rate limiter: 100 requests per 15 minutes
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 5, // Limit each IP to 5 requests per `window` (here, per 15 minutes)
  message: "Too many requests from this IP, please try again later.",
});

// Apply the rate limiting middleware to all requests
app.use(limiter);

app.get("/api/data", (req, res) => {
  res.send("Welcome to the API!");
});

app.listen(5000, () => {
  console.log("Server running on http://localhost:5000");
});
Nach dem Login kopieren
Nach dem Login kopieren

Hier ist, was passiert:

  1. Wir importieren useState zum Verwalten von Daten und Axios zum Stellen von API-Anfragen
  2. Wir erstellen zwei Zustandsvariablen:
    • Antwort: Speichert erfolgreiche API-Antworten
    • Fehler: Speichert etwaige Fehlermeldungen
  3. Die fetchData-Funktion:
    • Wird aufgerufen, wenn auf die Schaltfläche geklickt wird
    • Versucht, Daten von unserer API abzurufen
    • Aktualisiert entweder den Antwort- oder den Fehlerstatus
    • Verwendet try/catch, um Erfolg und Fehler zu verarbeiten
  4. Die Benutzeroberfläche zeigt:
    • Ein Titel
    • Eine Schaltfläche zum Auslösen von Anfragen
    • Die API-Antwort (falls erfolgreich)
    • Fehlermeldungen in Rot (wenn die Anfrage fehlschlägt) Wenn Sie innerhalb von 15 Minuten zu oft auf die Schaltfläche klicken, wird aufgrund unserer Backend-Einschränkungen die Fehlermeldung „Ratenbegrenzung“ angezeigt!

Das ist alles über das Beispiel einer GET-Anfrage. Fahren wir mit dem nächsten Beispiel fort

Beispiel für eine POST-Anfrage

Für dieses Beispiel können Sie den Code des ersten Beispiels auskommentieren und diesen Code einfügen ??

 {
  "scripts": {
    "dev": "nodemon index.js"
  }
}
Nach dem Login kopieren
Nach dem Login kopieren

Sie können sehen, dass die meisten Codes mit dem ersten Beispiel identisch sind, aber hier sind nur einige wichtige Unterschiede?

  • BodyParser zur Verarbeitung von Formulardaten hinzugefügt
  • Erstellt einen POST-Endpunkt, der Formularübermittlungen verarbeitet

Fügen Sie diesen Code auch im Frontend ein

  npm create vite@latest .
Nach dem Login kopieren

Hier stellen wir einfach über ein Formular eine Anfrage an den Server. Schauen wir uns an, wie sich dies vom GET-Beispiel unterscheidet:

  1. Verwendet ein Formular anstelle einer einzelnen Schaltfläche
  2. Verwaltet den Formularstatus mit formData
  3. Verarbeitet Eingabeänderungen mit handleInputChange
  4. Verwendet eine POST-Anfrage anstelle von GET
  5. Zeigt die Erfolgsmeldung in Grün an

Das Formular ermöglicht 5 Übermittlungen in 15 Minuten – danach sehen Benutzer die Fehlermeldung zur Ratenbegrenzung.

Abschluss

Okay Leute, herzlichen Glückwunsch, dass ihr am Ende dieses Artikels angelangt seid? Ich hoffe, Sie haben jetzt eine Vorstellung davon, wie die Ratenbegrenzung funktioniert und warum Sie sie bei Ihren Projekten verwenden sollten, insbesondere wenn Sie an größeren Projekten arbeiten, bei denen es um Geld geht. Wenn Sie Fragen haben, können Sie diese gerne im Kommentar stellen. Viel Spaß beim Codieren?

Das obige ist der detaillierte Inhalt vonDie Grundlagen der Ratenbegrenzung: Wie sie funktioniert und wie man sie nutzt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1672
14
PHP-Tutorial
1277
29
C#-Tutorial
1256
24
Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Apr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

JavaScript und das Web: Kernfunktionalität und Anwendungsfälle JavaScript und das Web: Kernfunktionalität und Anwendungsfälle Apr 18, 2025 am 12:19 AM

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

JavaScript in Aktion: Beispiele und Projekte in realer Welt JavaScript in Aktion: Beispiele und Projekte in realer Welt Apr 19, 2025 am 12:13 AM

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

Verständnis der JavaScript -Engine: Implementierungsdetails Verständnis der JavaScript -Engine: Implementierungsdetails Apr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python gegen JavaScript: Community, Bibliotheken und Ressourcen Python gegen JavaScript: Community, Bibliotheken und Ressourcen Apr 15, 2025 am 12:16 AM

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Python vs. JavaScript: Entwicklungsumgebungen und Tools Python vs. JavaScript: Entwicklungsumgebungen und Tools Apr 26, 2025 am 12:09 AM

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

Die Rolle von C/C bei JavaScript -Dolmetschern und Compilern Die Rolle von C/C bei JavaScript -Dolmetschern und Compilern Apr 20, 2025 am 12:01 AM

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.

Von Websites zu Apps: Die verschiedenen Anwendungen von JavaScript Von Websites zu Apps: Die verschiedenen Anwendungen von JavaScript Apr 22, 2025 am 12:02 AM

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.

See all articles