Heim > Backend-Entwicklung > Golang > Wie kann ich die Integrität des HTTP-Anforderungskörpers beim Reverse-Proxying bewahren?

Wie kann ich die Integrität des HTTP-Anforderungskörpers beim Reverse-Proxying bewahren?

Linda Hamilton
Freigeben: 2024-12-16 04:28:21
Original
442 Leute haben es durchsucht

How Can I Preserve HTTP Request Body Integrity When Reverse Proxying?

Bewahrung der HTTP-Anforderungskörperintegrität für Reverse-Proxying

Problem:

In einem benutzerdefinierten HTTP-Handler, der die ServeHTTP-Methode implementiert, Die Überprüfung des Hauptteils eingehender POST-Anfragen mit req.ParseForm() führt zu einem Fehler, wenn die Anfrage an einen Reverse-Proxy weitergeleitet wird. Dies liegt daran, dass das Lesen des Körpers den req.Body.Reader-Stream leert und nichts für nachfolgende Verbraucher übrig bleibt.

Lösung:

Um den ursprünglichen Anforderungsstatus beizubehalten, während die untersucht wird Beachten Sie die folgende Technik:

  1. Lesen Sie den Anforderungstext mit in einen Puffer io.ReadAll(r.Body).
  2. Erstellen Sie zwei neue Reader, rdr1 und rdr2, unterstützt durch den Puffer, mit io.NopCloser(bytes.NewBuffer(buf)).
  3. Verwenden Sie rdr1, um Untersuchen Sie den Körper und führen Sie die gewünschten Aktionen aus.
  4. Setzen Sie r.Body auf rdr2 zurück Behalten Sie den ursprünglichen Anforderungsstatus für den Reverse-Proxy bei.

Codebeispiel:

buf, _ := io.ReadAll(r.Body)
rdr1 := io.NopCloser(bytes.NewBuffer(buf))
rdr2 := io.NopCloser(bytes.NewBuffer(buf))

doStuff(rdr1)
r.Body = rdr2 // Resets the request body without consuming any data
Nach dem Login kopieren

Hinweis:

bytes.Buffer implementiert die io.ReadCloser-Schnittstelle aufgrund des Fehlens einer Close()-Methode nicht; daher ist jeder Leser in io.NopCloser.

eingeschlossen

Das obige ist der detaillierte Inhalt vonWie kann ich die Integrität des HTTP-Anforderungskörpers beim Reverse-Proxying bewahren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage