Ich versuche zu vermeiden, Verkehr zu verschwenden, indem HTTP-Antwort Körper nur lesen, wenn ich sehe Content-Typ und Inhalt-Länge kleiner als Schwellenwert gesetzt.Erhalten Antwort von Request bekommen alle den Körper? (Golang, Net/http)
httpRequest, err := http.NewRequest("GET", url, nil)
httpResponse, err := httpClient.Do(httpRequest)
contentType := httpResponse.Header.Get("Content-Type")
// ... check for correct contentType
// Read body into memory?
content, err := ioutil.ReadAll(httpResponse.Body)
Ist es richtig davon aus, dass, wenn ich GET-Anfrage zu machen, werde ich den ganzen Körper bekommen unabhängig davon, ob ich iotuil.ReadAll letzte Zeile nennen (httpResponse.Body) oder nicht?
Wenn ja, ist die einzige Möglichkeit, die Vermeidung von Verkehrsverschwendung denke ich HEAD Anfrage, aber ich würde eine andere GET Anfrage machen, wenn ich tatsächlich den Körper lesen möchte. Auch bekomme ich richtig content-length Wert, wenn ich HEAD Anfrage mache?
Was wäre die beste Strategie?
Danke für die schnelle Antwort. Willst du damit sagen, dass net/http ** keine TCP-Pakete sendet, um den Body zu lesen, bis ** ioutil.ReadAll (httpResponse.Body) ** aufgerufen wird? – shicky
Wenn der Client den Antworttext nicht liest, sendet der Server Daten, bis das TCP-Fenster gefüllt ist oder der Client die Verbindung schließt. Das Schließen des Antwortkörpers ist die einzige Option zum Reduzieren der über das Netzwerk übertragenen Datenmenge. –