使用Go http客户端意外的EOF

Ale*_*lin 11 error-handling http go

我正在学习Go并遇到了这个问题.

我只是使用HTTP客户端下载网页内容:

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    client := &http.Client{}

    req, err := http.NewRequest("GET", "https://mail.ru/", nil)
    req.Close = true

    response, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }

    defer response.Body.Close()

    content, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(content)[:100])
}
Run Code Online (Sandbox Code Playgroud)

我得到一个unexpected EOF读响应主体时的错误.同时内容变量具有完整页面内容.

仅在下载https://mail.ru/内容时才会出现此错误.使用其他URL一切正常 - 没有任何错误.

我使用curl下载此页面内容 - 一切都按预期工作.

我有点困惑 - 这里发生了什么?

去v1.2,在Ubuntu和MacOS X上试过

az_*_*az_ 7

它看起来像服务器(Apache 1.3,哇!)正在提供截断的gzip响应.如果您明确请求identity编码(阻止Go传输gzip自己添加),您将无法获得ErrUnexpectedEOF:

req.Header.Add("Accept-Encoding", "identity")
Run Code Online (Sandbox Code Playgroud)