Beibehalten des Anforderungsstatus beim Überprüfen des Hauptteils mit HTTP.Handler
Im Zusammenhang mit der Implementierung eines HTTP-Handlers wird der Zugriff auf den Anforderungshauptteil mithilfe von Methoden wie req.ParseForm() kann ein Dilemma schaffen. Obwohl eine solche Überprüfung oft notwendig ist, kann sie den Body-Stream der Anfrage erschöpfen und ihn für nachfolgende Handler (z. B. Reverse-Proxys) unbrauchbar machen.
Das Problem: Entleerter Body-Stream
Wenn der Anforderungstext durch Aufrufen von Methoden wie req.ParseForm() verbraucht wird, wird der req.Body.Reader-Stream geleert, sodass keine verbleibenden Daten für den Downstream übrig bleiben Handler. Dies führt zu Fehlern bei der Proxy-Weiterleitung, da die erwartete Länge des Anforderungstexts nicht mehr mit dem erschöpften Zustand übereinstimmt.
Die Lösung: Teilen Sie den Body Stream auf
Um diese Herausforderung zu meistern kann eine Technik mit einer Pufferschicht eingesetzt werden. Indem wir den Anforderungstext in einen Puffer einlesen und diesen Puffer verwenden, um mehrere neue Leser zu erstellen, können wir die Inspektion vom ursprünglichen Textstrom trennen.
Schritte:
Beispiel:
buf, _ := io.ReadAll(r.Body) rdr1 := io.NopCloser(bytes.NewBuffer(buf)) rdr2 := io.NopCloser(bytes.NewBuffer(buf)) doStuff(rdr1) r.Body = rdr2
Vorteile:
Das obige ist der detaillierte Inhalt vonWie kann ich einen HTTP-Anfragetext überprüfen, ohne Daten für nachfolgende Handler zu verlieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!