Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menghantar Respons HTTP yang Dipotong daripada Pelayan Go?

Bagaimana untuk Menghantar Respons HTTP yang Dipotong daripada Pelayan Go?

Barbara Streisand
Barbara Streisandasal
2024-12-01 19:50:11617semak imbas

How to Send Chunked HTTP Responses from a Go Server?

Hantar Tindak Balas HTTP Chunk dari Pelayan Go

Penyelesaian:

Untuk menghantar chunk Respons HTTP daripada pelayan Go dan menerimanya dalam masa nyata, anda perlu menggunakan Flusher.Flush() selepas menulis setiap ketulan data. Ini mencetuskan pengekodan "chunked" dan segera menghantar chunk kepada klien. Berikut ialah contoh cara untuk melaksanakan perkara ini:

package main

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

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        flusher, ok := w.(http.Flusher)
        if !ok {
            panic("expected http.ResponseWriter to be an http.Flusher")
        }
        w.Header().Set("X-Content-Type-Options", "nosniff")
        for i := 1; i <= 10; i++ {
            fmt.Fprintf(w, "Chunk #%d\n", i)
            flusher.Flush() // Trigger "chunked" encoding and send a chunk...
            time.Sleep(500 * time.Millisecond)
        }
    })

    log.Print("Listening on localhost:8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

Pengesahan:

Menggunakan telnet, anda boleh menyambung ke pelayan dan menyaksikan respons potongan dihantar:

$ telnet localhost 8080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Tue, 02 Jun 2015 18:16:38 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked

9
Chunk #1

9
Chunk #2

...

Tambahan Nota:

  • Perlu diteliti sama ada http.ResponseWriters menyokong akses serentak untuk kegunaan serentak oleh berbilang goroutine.
  • Untuk maklumat lanjut tentang "X-Content-Type-Options " pengepala, rujuk soalan berkaitan ini.

Atas ialah kandungan terperinci Bagaimana untuk Menghantar Respons HTTP yang Dipotong daripada Pelayan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn