Heim > Web-Frontend > js-Tutorial > Hauptteil

Analyse häufiger Probleme in der http-Proxy-Bibliothek http-proxy in nodejs

不言
Freigeben: 2018-08-13 17:37:31
Original
3031 Leute haben es durchsucht

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

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',
},
Nach dem Login kopieren

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~

Das Backend-Nginx ist mit einem Reverse-Proxy konfiguriert

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
},
Nach dem Login kopieren

changeOrigin: trueDas bedeutet, dass Sie einfach den Hostnamen ändern, damit er mit dem Ziel übereinstimmt. Auf diese Weise kann der Backend-Nginx normal weiterleiten.

Das Back-End wird mit dem Cookie-Pfad konfiguriert

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
Nach dem Login kopieren

Front-End-Adresse:

trans.17u.cn/saas
Nach dem Login kopieren

Passen Sie die Proxy-Konfiguration entsprechend an

'/saas/saasapi/*': {
    target: 'http://ebk.17u.cn',
    changeOrigin: true,
    rewrite: path => path.replace(/^\/saas\/saasapi\/cxy/, '/saasapi')
},
Nach dem Login kopieren

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/saasDas 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' }
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!