Я создаю тестовый HTTP-сервер HTTP, и я отправляю ответный заголовок Transfer-Encoding: chunked, поэтому я могу постоянно отправлять новые данные по мере их получения. Этот сервер должен писать кусок на этот сервер каждую секунду. Клиент должен иметь возможность получать их по требованию.
К сожалению, клиент (завиток в этом случае) получает все куски в конце продолжительности, 5 секунд, вместо того, чтобы получать один кусок каждую секунду. Кроме того, Go, похоже, отправляет Content-Length для меня. Я хочу отправить Content-Length в конце, и я хочу, чтобы значение заголовка было 0.
Вот код сервера:
package main
import (
"fmt"
"io"
"log"
"net/http"
"time"
)
func main() {
http.HandleFunc("/test", HandlePost);
log.Fatal(http.ListenAndServe(":8080", nil))
}
func HandlePost(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Connection", "Keep-Alive")
w.Header().Set("Transfer-Encoding", "chunked")
w.Header().Set("X-Content-Type-Options", "nosniff")
ticker := time.NewTicker(time.Second)
go func() {
for t := range ticker.C {
io.WriteString(w, "Chunk")
fmt.Println("Tick at", t)
}
}()
time.Sleep(time.Second * 5)
ticker.Stop()
fmt.Println("Finished: should return Content-Length: 0 here")
w.Header().Set("Content-Length", "0")
}