我试图通过阅读http响应正文来避免浪费流量,只有当我看到正确的内容类型和内容长度小于设定的阈值。获取来自请求的响应是否获得了所有的身体? (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)
它是正确的假设,如果我做的GET请求,我将让所有的身体,无论我是否叫最后一行iotuil.ReadAll(httpResponse.Body)与否?
如果是这样,我可以想到避免浪费流量的唯一方法是使用HEAD请求,但如果我真的想要读取正文,我将不得不做另一个GET请求。如果我提出HEAD请求,还可以得到正确的content-length值吗?
什么是最好的策略?
感谢您的快速回答。你是说net/http **不会发送TCP数据包**来读取body,直到** ioutil.ReadAll(httpResponse.Body)**被调用? – shicky
如果客户端没有读取响应主体,则服务器将发送数据,直到TCP窗口填充或客户端关闭连接。关闭响应主体是减少通过网络传输的数据量的唯一选择。 –