«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему HTTP -серверы не посылают отклики на разгар?

Почему HTTP -серверы не посылают отклики на разгар?

Опубликовано в 2025-04-14
Просматривать:912

Why Doesn't My Go HTTP Server Send Chunked Responses Progressively?

http chunks response с сервера Go

В этом сценарии мы стремимся создать HTTP-сервер, который отправляет кучевый HTTP-ответ с помощью «Chunced». Сервер намеревается писать куски с одними секундными интервалами, что позволяет клиенту получать их по требованию. Однако текущая реализация сталкивается с проблемами:

  1. Клиент получает все кусочки одновременно, а не постепенно, как предполагалось. При условии, что код сервера выглядит следующим образом:
  2. ]
  3. 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") Тикер: = Time.NewTicker (Time.Second) Go func () { для t: = range ticker.c { io.writestring (w, "Chunk") fmt.println ("tick at", t) } } () время. ticker.stop () fmt.println ("Закончено: должен вернуть длину контента: 0 здесь") W.Header (). SET («Длина контента», «0») }

Solution

для разрешения проблем:

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")
}

] verification

используйте Telnet для подключения к серверу:

    $ telnet localhost 8080 ... Http/1.1 200 OK Дата: ... Тип контента: текст/plain; charset = utf-8 Кодирование передачи: кусочке 9 Чанк №1 9 Чанк №2 ...
  1. каждый кусок будет постепенно получен, когда сервер отправляет их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3