автоматическое распаковывание тела запроса gzip

#go

#Вперед

Вопрос:

Не выполняется автоматическое распаковывание тела запроса gzip, если Content-Encoding: gzip установлен заголовок?

например

 package main

import (
    "compress/gzip"
    "encoding/json"
    "fmt"
    "io"
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    requestBody, err := json.Marshal(map[string]string{
        "accountReferenceId": "abcd",
        "transactionType":    "Deposit",
        "amount":             "100.00",
    })

    if err != nil {
        log.Fatal(err)
    }

    r, w := io.Pipe()
    go func() {
        err := compressJSON(w, requestBody)
        w.CloseWithError(err)
    }()
    client := amp;http.Client{}
    req, err := http.NewRequest("POST", "http://localhost:7070/transactions", r)

    if err != nil {
        log.Fatal("error making request", err)
    }
    req.Header.Set("Content-Encoding", "gzip")
    //req.Header.Set("Accept-Encoding", "gzip")
    req.Header.Set("Content-Type", "application/json")

    resp, err := client.Do(req)
    if err != nil {
        log.Fatal("unable to get response", err)
    }
    bodyBytes, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal("unable to read response body", err)
    }
    fmt.Println(string(bodyBytes))
}

func compressJSON(w io.Writer, i interface{}) error {
    gz := gzip.NewWriter(w)
    if err := json.NewEncoder(gz).Encode(i); err != nil {
        return err
    }
    return gz.Close()
}
  

Когда сервер получает этот запрос, содержимое тела все еще сжимается. Как я могу сделать его автоматической распаковкой?

Комментарии:

1. Нет, сервер этого не делает

2. Я думаю, если вам нужно сжать ответ самостоятельно, то имеет смысл также сжать его самостоятельно.

3. Это также зависит от http.Transport используемого для выполнения запроса-ответа туда и обратно; пожалуйста, обратитесь к документации .

4. HTTP- клиент Go автоматически распаковывает ответы . Сервер не имеет встроенной поддержки сжатия, но промежуточное программное обеспечение для его добавления тривиально, и многие версии доступны в свободном доступе.

5. Вы имеете в виду запрос на распаковку? В приведенном выше случае этого не происходит., но да, я вижу много промежуточных программ для сжатия ответа