Heim Web-Frontend js-Tutorial TIL: Tabs blockieren und IP in Javascript abrufen

TIL: Tabs blockieren und IP in Javascript abrufen

Oct 31, 2024 pm 07:03 PM

Willkommen zum ersten Teil meiner „Today I Learned“-Reihe! In diesen Beiträgen teile ich praktische Erkenntnisse, die ich während meiner Arbeit als Algorithmus-Ingenieur gewonnen habe, und vertiefe mich in die Techniken, die ich implementiert habe, um reale Herausforderungen zu bewältigen. Ich hoffe, dass diese Lektionen auch für Ihre Projekte von Nutzen sind.

Wichtige Erkenntnisse

  • Kontrolle mehrerer Tab-Instanzen: Verhindert, dass Benutzer mehrere Instanzen derselben Webanwendung öffnen, was Ressourcen belasten und möglicherweise Server zum Absturz bringen kann.
  • Erhalten der IP-Adresse eines Benutzers mit JavaScript: Verstehen, warum das Erhalten der IP-Adresse eines Benutzers in JavaScript aufgrund von Sicherheitsbeschränkungen und der Suche nach Problemumgehungen eine Herausforderung darstellt.

Zur Veranschaulichung werde ich ein Projekt durchgehen, an dem ich mit Gesichtserkennungstechnologie gearbeitet habe – insbesondere die Schritte, die erforderlich sind, um die Verarbeitung zu optimieren und die Leistung aller Benutzer aufrechtzuerhalten.

Projektübersicht: Erstellen einer Webanwendung zur Gesichtserkennung

TIL: Block tabs and Get IP in Javascript

In diesem Beispiel bestand die Aufgabe darin, eine Gesichtserkennungsanwendung (Check-in-Check-out-System) zu erstellen, auf die über einen Webbrowser zugegriffen werden kann. Die Anwendung musste:

  1. Automatisch starten, wenn die Seite geladen wird.
  2. Erfassen Sie das Gesicht des Benutzers, überprüfen Sie es auf „Lebendigkeit“ (um zu bestätigen, dass es sich um eine echte Person handelt) und übertragen Sie das Bild dann zur Erkennung an einen Server.
  3. Zeigen Sie das Erkennungsergebnis im Browser an.

Die Anwendung besteht aus zwei Hauptkomponenten:

  • Clientseitige Verarbeitung: Beinhaltet Gesichtserkennung und Liveness-Erkennung, verarbeitet im Browser.
  • Serverseitige Verarbeitung: Verantwortlich für die Gesichtserkennung, Nutzung von Serverressourcen für den Identitätsabgleich.

Stellen Sie sich der Einfachheit halber vor, dass der Client ein Gesicht erkennt und verifiziert, bevor er es an den Server sendet, wo der Server Ergebnisse zurückgibt und der Browser sie anzeigt.

Das Problem: Mehrere Tabs verhindern

TIL: Block tabs and Get IP in Javascript

Stellen Sie sich einen typischen Benutzer vor, Alex, der vor kurzem damit begonnen hat, eine neue Web-App mit Gesichtserkennung zum Ein- und Ausstempeln zu verwenden. Eines Morgens beschloss Alex, die App in einigen Browser-Tabs zu öffnen, weil er dachte, er könne das Einchecken beschleunigen, indem er sie in mehreren Tabs gleichzeitig teste.

Fast sofort ging es bergab. Beim Laden jeder Registerkarte wurden die Gesichtserkennungs- und Verifizierungsprozesse der App unabhängig initialisiert. Alex bemerkte, dass sein Computer drastisch langsamer wurde und der Browser schließlich langsamer wurde. Hinter den Kulissen verbrauchten diese verschiedenen Tabs jeweils Ressourcen, um Alex‘ Gesicht zu verarbeiten, was die Leistung seines Geräts stark beeinträchtigte.

Aber damit war das Problem noch nicht erledigt. Da jeder Tab separate Erkennungsanfragen an den Server sendete, stieg die Serverlast der App an, was zu Verzögerungen bei der gleichzeitigen Anmeldung anderer Benutzer führte. Der mit doppelten Anfragen überlastete Server konnte kaum mithalten, was zu Verzögerungen und verpassten Check-ins führte.

Um die Sache noch verwirrender zu machen, wurde auf jeder Registerkarte ein anderer, inkonsistenter Anmeldestatus angezeigt. Alex wurde schnell klar, dass das Öffnen der App in mehreren Tabs ihm unnötige Kopfschmerzen und potenzielle Probleme für das gesamte Unternehmen bereitet hatte.

Um eine reibungslose Funktionalität zu gewährleisten und eine unnötige Belastung der Client- und Serverressourcen zu vermeiden, mussten wir verhindern, dass Benutzer mehrere Registerkarten mit der Anwendung öffnen

Das Ziel bestand darin, Benutzer daran zu hindern, mehr als eine Instanz der App gleichzeitig in ihrem Browser zu öffnen, indem vor allem erkannt wurde, wann andere Tabs mit derselben App bereits geöffnet sind. So gehen Sie vor:

if (localStorage.getItem('isAppRunning') === 'true') {
    alert("The application is already open in another tab. Please close this tab.");
} else {
    // Set a flag in localStorage to indicate the app is running
    localStorage.setItem('isAppRunning', 'true');

    // Add an event listener to clear the flag when the tab is closed
    window.addEventListener('beforeunload', () => {
        localStorage.removeItem('isAppRunning');
    });

    // Main function to load models and start video if the app is not running in another tab
    (async function main() {
        try {
            const config = await loadConfig(); // Load models concurrently

            const [tinyFaceDetector, fasnet, phoneDetect] = await Promise.all([
                loadTinyFaceDetector(),
                loadFasnet(config),
                loadPhoneDetect(config),
            ]);
            Object.assign(window, { fasnet, phoneDetect, config });

            startVideo();
        } catch (err) {
            console.error('Initialization failed:', err);
        }
    })();
}
Nach dem Login kopieren
Nach dem Login kopieren

Das Problem: Benutzer-IP abrufen

In unserem Gesichtserkennungssystem hat sich die Anforderung entwickelt, nur autorisierten abteilungsspezifischen Zugriff zu ermöglichen. Wenn Person A beispielsweise zu Abteilung A gehört, sollte sie sich nur auf Geräten im Netzwerk von Abteilung A ein- oder auschecken können, nicht jedoch in Abteilung B oder einer anderen Abteilung. Da diese Computer über ein lokales Netzwerk (LAN) verbunden sind, benötigen wir eine Möglichkeit, den Zugriff anhand der IP-Adresse des Geräts zu identifizieren und einzuschränken

TIL: Block tabs and Get IP in Javascript

Als ich online gesucht habe, habe ich einige Informationen zum Abrufen der IP-Adresse erhalten. Aber sie haben ein paar Probleme

function user_location() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      console.log( this.responseText);
    }
  };
  xhttp.open("GET", "//api.ipify.org?format=json", true);
  xhttp.send();
}
Nach dem Login kopieren

Diese Funktion ruft erfolgreich die öffentliche IP-Adresse des Benutzers ab; Es stellt jedoch nicht die interne LAN-IP-Adresse bereit, die für die abteilungsspezifische Zugriffskontrolle erforderlich ist. Darüber hinaus ist es anfällig für die Maskierung durch VPNs oder Firewalls.

oder vielleicht dieses

Firefox und Chrome haben WebRTC implementiert, das es ermöglicht, Anfragen an STUN-Server zu stellen, die die lokalen und öffentlichen IP-Adressen für den Benutzer zurückgeben

Aber ich möchte meiner App keine weiteren Pakete hinzufügen. Diese Komplexität, kombiniert mit möglichen Inkonsistenzen zwischen verschiedenen Browsern, macht es weniger wünschenswert.

Dann habe ich diesen Beitrag gefunden

Das direkte Abrufen einer Client-IP-Adresse mit im Browser ausgeführtem JavaScript ist nicht einfach. Dies liegt daran, dass JavaScript keinen Zugriff auf die Netzwerkschicht hat, auf der IP-Adressen offengelegt werden. Darüber hinaus blockieren Browser aus Sicherheitsgründen die JavaScript-Umgebung und verhindern so den Zugriff auf bestimmte Informationen auf Systemebene, einschließlich der IP-Adresse des Clients.

Es stellt sich heraus, dass das Abrufen der IP-Adresse allein mit JavaScript nicht möglich ist. Es gibt jedoch eine einfache Lösung: Erstellen eines API-Endpunkts auf dem Server, um die IP-Adresse des Benutzers zu erhalten.

if (localStorage.getItem('isAppRunning') === 'true') {
    alert("The application is already open in another tab. Please close this tab.");
} else {
    // Set a flag in localStorage to indicate the app is running
    localStorage.setItem('isAppRunning', 'true');

    // Add an event listener to clear the flag when the tab is closed
    window.addEventListener('beforeunload', () => {
        localStorage.removeItem('isAppRunning');
    });

    // Main function to load models and start video if the app is not running in another tab
    (async function main() {
        try {
            const config = await loadConfig(); // Load models concurrently

            const [tinyFaceDetector, fasnet, phoneDetect] = await Promise.all([
                loadTinyFaceDetector(),
                loadFasnet(config),
                loadPhoneDetect(config),
            ]);
            Object.assign(window, { fasnet, phoneDetect, config });

            startVideo();
        } catch (err) {
            console.error('Initialization failed:', err);
        }
    })();
}
Nach dem Login kopieren
Nach dem Login kopieren
  • Wenn ein Client eine Anfrage stellt, füllt Flask das Anfrageobjekt automatisch mit verschiedenen Headern und Verbindungsdetails.

  • Zuerst überprüft der Code den X-Forwarded-For-Header mit client_ip = request.headers.get('X-Forwarded-For').

  • Zweck: Dieser Header wird üblicherweise von Proxys oder Load Balancern festgelegt, um die ursprüngliche Client-IP-Adresse beizubehalten. Wenn die Anfrage über einen Proxy oder Load Balancer geleitet wurde, sollte die tatsächliche IP-Adresse des Clients in diesem Header erscheinen.

  • Wenn der X-Forwarded-For-Header gefunden wird, wird client_ip auf seinen Wert gesetzt.

  • Wenn der X-Forwarded-For-Header fehlt (z. B. wenn der Client eine direkte Verbindung ohne Proxy herstellt), verwendet der Code request.remote_addr, um die IP-Adresse direkt vom Client abzurufen.

Zusammenfassung

In diesem Beitrag teile ich meine Erfahrungen bei der Bewältigung realer Herausforderungen bei der Entwicklung einer webbasierten Gesichtserkennungs-App. Hier sind zwei Hauptprobleme, die wir gelöst haben:

  • Verhindern mehrerer Tab-Instanzen: Um zu verhindern, dass Benutzer die App in mehreren Browser-Tabs öffnen, verwenden wir localStorage, um zu verfolgen, ob die App bereits geöffnet ist. Dies verhindert redundante Gesichtserkennungsprozesse, die sowohl Client- als auch Serverressourcen belasten.

  • Benutzer-IP-Adresse abrufen: Da JavaScript aus Sicherheitsgründen nicht direkt auf die LAN-IP eines Geräts zugreifen kann, richten wir einen API-Endpunkt auf dem Server ein, um die IP aus Anforderungsheadern abzurufen. Dieser Ansatz gewährleistet eine abteilungsspezifische Zugriffskontrolle nur für autorisierte Geräte.

Das obige ist der detaillierte Inhalt vonTIL: Tabs blockieren und IP in Javascript abrufen. 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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate 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)

Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Mar 18, 2025 pm 03:12 PM

In Artikel werden JavaScript -Bibliotheken erstellt, veröffentlicht und aufrechterhalten und konzentriert sich auf Planung, Entwicklung, Testen, Dokumentation und Werbestrategien.

Wie optimiere ich den JavaScript -Code für die Leistung im Browser? Wie optimiere ich den JavaScript -Code für die Leistung im Browser? Mar 18, 2025 pm 03:14 PM

In dem Artikel werden Strategien zur Optimierung der JavaScript -Leistung in Browsern erörtert, wobei der Schwerpunkt auf die Reduzierung der Ausführungszeit und die Minimierung der Auswirkungen auf die Lastgeschwindigkeit der Seite wird.

Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Apr 04, 2025 pm 02:42 PM

Häufig gestellte Fragen und Lösungen für das Ticket-Ticket-Ticket-Ticket in Front-End im Front-End-Entwicklungsdruck ist der Ticketdruck eine häufige Voraussetzung. Viele Entwickler implementieren jedoch ...

Wie debugge ich den JavaScript -Code effektiv mithilfe von Browser -Entwickler -Tools? Wie debugge ich den JavaScript -Code effektiv mithilfe von Browser -Entwickler -Tools? Mar 18, 2025 pm 03:16 PM

In dem Artikel werden effektives JavaScript -Debuggen mithilfe von Browser -Entwickler -Tools, der Schwerpunkt auf dem Festlegen von Haltepunkten, der Konsole und der Analyse der Leistung erörtert.

Wer bekommt mehr Python oder JavaScript bezahlt? Wer bekommt mehr Python oder JavaScript bezahlt? Apr 04, 2025 am 12:09 AM

Es gibt kein absolutes Gehalt für Python- und JavaScript -Entwickler, je nach Fähigkeiten und Branchenbedürfnissen. 1. Python kann mehr in Datenwissenschaft und maschinellem Lernen bezahlt werden. 2. JavaScript hat eine große Nachfrage in der Entwicklung von Front-End- und Full-Stack-Entwicklung, und sein Gehalt ist auch beträchtlich. 3. Einflussfaktoren umfassen Erfahrung, geografische Standort, Unternehmensgröße und spezifische Fähigkeiten.

Wie verwende ich Quellkarten zum Debuggen, um den JavaScript -Code zu debuggen? Wie verwende ich Quellkarten zum Debuggen, um den JavaScript -Code zu debuggen? Mar 18, 2025 pm 03:17 PM

In dem Artikel wird erläutert, wie Quellkarten zum Debuggen von JavaScript verwendet werden, indem er auf den ursprünglichen Code zurückgegeben wird. Es wird erläutert, dass Quellenkarten aktiviert, Breakpoints eingestellt und Tools wie Chrome Devtools und WebPack verwendet werden.

Wie fusioniere ich Arrayelemente mit derselben ID mit JavaScript in ein Objekt? Wie fusioniere ich Arrayelemente mit derselben ID mit JavaScript in ein Objekt? Apr 04, 2025 pm 05:09 PM

Wie fusioniere ich Array -Elemente mit derselben ID in ein Objekt in JavaScript? Bei der Verarbeitung von Daten begegnen wir häufig die Notwendigkeit, dieselbe ID zu haben ...

Der Unterschied in der Konsole.log -Ausgabeergebnis: Warum unterscheiden sich die beiden Anrufe? Der Unterschied in der Konsole.log -Ausgabeergebnis: Warum unterscheiden sich die beiden Anrufe? Apr 04, 2025 pm 05:12 PM

Eingehende Diskussion der Ursachen des Unterschieds in der Konsole.log-Ausgabe. In diesem Artikel wird die Unterschiede in den Ausgabeergebnissen der Konsolenfunktion in einem Code analysiert und die Gründe dafür erläutert. � ...

See all articles