Der Inhalt dieses Artikels befasst sich mit der Analyse häufiger Probleme in der http-Proxy-Bibliothek in nodejs. Ich hoffe, dass er für Sie hilfreich ist.
http-proxy ist eine NodeJS-HTTP-Proxy-Bibliothek, die vom Webpack-Dev-Server integriert und als Proxy verwendet wurde. Der Grund dafür ist, dass es heute, wo die Trennung von Front-End und Back-End beliebt ist, unweigerlich eine domänenübergreifende Anforderung sein wird, wenn wir die Back-End-API-Schnittstelle lokal anpassen müssen, ohne den Hostnamen zu konfigurieren. Aufgrund der domänenübergreifenden Sicherheitsbeschränkungen des Browsers wird der Aufruf blockiert, sodass der lokale Proxy zu einem Muss für eine lokale Entwicklungsumgebung geworden ist.
'/saasapi/*': { target: 'http://ebk.17u.cn', },
Es bedeutet wahrscheinlich, dass die Ajax-Anfrage, die mit saasapi beginnt, auf http://ebk.17u.cn
umgeleitet wird. Es gibt kein Problem für die lokale Entwicklung, wenn Sie auch den NodeJS-Server online verwenden, wenn Sie zufällig einen Proxy konfigurieren , Bei der Online-Bereitstellung sind unerwartete Probleme aufgetreten~
Der Hauptdomänenname einer Website ist 17u.cn, wenn mehrere API-Dienste im Backend bereitgestellt werden , Dann könnte sein API-Dienst so aussehen
主域名 | 二级域名1 | 二级域名2 | 二级域名3 |
---|---|---|---|
17u.cn | ebk.17u.cn | ebk2.17u.cn | ebk3.17u.cn |
Das Front-End stellt außerdem 3 NodeJS-Dienste bereit und konfiguriert außerdem 3 Agenten. Nach der Online-Bereitstellung stellten wir fest, dass die Anforderung immer auf den ersten Domänennamen der zweiten Ebene verweist und auf andere Domänennamen der zweiten Ebene nicht zugegriffen werden kann.
Ich kann nicht anders, als an dich zu denken!
Später habe ich die http-Informationen sorgfältig überprüft und festgestellt, dass nach dem Senden der Ajax-Anforderungen mehrerer Dienste an den Server der Hostname der Domänenname des Browsers war und die Reverse-Proxy-Konfiguration von Nginx basierend weitergeleitet wurde auf dem Hostnamen. Da unser Hostname Nginx unbekannt ist, wird er standardmäßig an den ersten Standarddienst weitergeleitet.
Ich habe die http-Proxy-Konfiguration überprüft, haha, tatsächlich, es gibt so eine modifizierte Konfiguration, ändern Sie sie einfach ein wenig.
'/saasapi/*': { target: 'http://ebk.17u.cn', changeOrigin: true },
changeOrigin: true
Das bedeutet, dass Sie einfach den Hostnamen ändern, damit er mit dem Ziel übereinstimmt. Auf diese Weise kann der Backend-Nginx normal weiterleiten.
Die Back-End-API konfiguriert nicht nur den Domänennamen der zweiten Ebene, sondern auch das Verzeichnis der zweiten Ebene Für das Frontend ist auch das Verzeichnis der zweiten Ebene erforderlich.
Die API-Adresse sieht so aus:
ebk.17u.cn/saasapi
Front-End-Adresse:
trans.17u.cn/saas
Passen Sie die Proxy-Konfiguration entsprechend an
'/saas/saasapi/*': { target: 'http://ebk.17u.cn', changeOrigin: true, rewrite: path => path.replace(/^\/saas\/saasapi\/cxy/, '/saasapi') },
Das sieht normal aus, oder? , aber was ist das Problem? Das Backend legt auch den Pfad für das Cookie-Set nach der Anmeldung fest: Path='/saasapi'
.
Das Problem tritt auf. trans.17u.cn/saas
Das folgende Cookie /saasapi
kann unter dem aktuellen Domänennamen nicht gelesen werden, was dazu führt, dass die Front-End-Anmeldung jedes Mal durchgelassen wird, die API jedoch nicht jedes Mal normal angepasst werden kann es heißt, es schlägt fehl. Prompt nicht angemeldet.
Wenn Sie Fragen haben, überprüfen Sie bitte zuerst die Dokumentation.
Ich habe immer noch eine Lösung gefunden
cookiePathRewrite: { '/saasapi': '/saas/saasapi' }
Schreiben Sie einfach den Cookie-Pfad neu. Ebenso gibt es immer noch eine Lösung, wenn die Backend-Schnittstelle die Domäne des Cookies angibt
cookieDomainRewrite
Auch Es gibt einige andere Umschreibungen, die einfacher zu verwenden sein sollten.
ps: Bei der Lösung des Problems stellte ich fest, dass die Änderung immer erfolglos war. Ich hatte einmal den Verdacht, dass es sich um einen Fehler in der Bibliothek handelte. Später stellte ich fest, dass ich die Cookies von Chrome löschen musste.
Klicken Sie auf Anwendung -> Cookie: Die folgenden Cookies können nicht gelöscht werden. Es können nicht alle Cookies gelöscht werden. Sie müssen zu „Anwendung“ -> „Speicher löschen“ und „Site-Daten löschen“ gehen. Endgültiger Erfolg
Verwandte Empfehlungen:
Detaillierte Analyse und Differenzvergleich der Front-End-Modularisierung in Js
Welche Methoden gibt es in jQuery? ?Häufig verwendete Methoden in jQuery (mit Code)
Der Unterschied und die Konvertierung zwischen jQuery-Objekten und nativen DOM-Objekten
Das obige ist der detaillierte Inhalt vonAnalyse häufiger Probleme in der http-Proxy-Bibliothek http-proxy in nodejs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!