


Wenn Golang http ResponseWriter 2 KB nicht überschreitet, warum wird die Inhaltslänge dann automatisch hinzugefügt?
Der PHP-Editor Xinyi beantwortet für Sie eine Frage zu Golang: Warum wird die Inhaltslänge bei der Verarbeitung einer http-Anfrage automatisch hinzugefügt, wenn der Inhalt des ResponseWriter 2 KB nicht überschreitet? Dies liegt tatsächlich daran, dass die Inhaltslänge im HTTP-Protokoll ein erforderliches Feld ist, das verwendet wird, um dem Client die Länge der zu empfangenden Daten mitzuteilen, damit er die Antwort korrekt analysieren kann. Auch wenn die Inhaltslänge gering ist, muss der Server dieses Feld dennoch bereitstellen, um einen vollständigen Kommunikationsprozess sicherzustellen. Auf diese Weise kann der Client den Inhalt korrekt empfangen und analysieren und so die Integrität und Genauigkeit von Anfragen und Antworten sicherstellen.
Frageninhalt
func (handler Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var content string ... w.Write([]byte(content)) }
Wenn len(content) <= 2048, dann content-length
将自动添加到响应中。而如果超过2048,则没有content-length
,则会添加transfer-encoding: chunked
.
Ich kann nicht finden, wo ich 2048 bestimmen kann.
Ich bitte um Hilfe bei der Suche nach dem Quellcode, in dem 2048 festgelegt ist.
Lösung
Werfen wir einen Blick auf die Dokumentation für diese Funktion in der http.responsewriter
Schnittstelle, nur als Referenz. Klarheit:
[i] Wenn die Gesamtgröße aller geschriebenen Daten unter ein paar KB liegt und keine Flush-Aufrufe erfolgen, wird der Content-Length-Header automatisch hinzugefügt.
Erstens können wir sehen, dass die Zahl möglicherweise nicht genau 2048 (2 kb) beträgt, sondern innerhalb des „wenigen kb“-Bereichs liegt, den wir erwarten würden. Zweitens können wir sehen, dass dieses Verhalten mit der flush
方法有关,该方法记录在 flusher
-Schnittstelle in übereinstimmt:
flush sendet alle gepufferten Daten an den Client.
Die Flusher-Schnittstelle wird vom Responsewriter implementiert und ermöglicht HTTP-Handlern, gepufferte Daten an den Client zu übertragen.
Die standardmäßigen http/1.x- und http/2-Responsewriter-Implementierungen unterstützen Flusher, Responsewriter-Wrapper jedoch möglicherweise nicht. Handler sollten diese Funktionalität immer zur Laufzeit testen.
Wie es heißt, löscht Ihre responsewriter
可能支持数据缓冲和刷新。这意味着当您将数据写入响应写入器时,它不会立即通过连接传输。相反,它首先被写入缓冲区。每次缓冲区太满而无法再写入时,当 servehttp
方法返回时,整个缓冲区将被传输。这可以确保即使您进行大量微小写入,数据也能有效传输,并且所有数据最终都能传输。您还可以选择使用 flush
-Methode den Puffer jederzeit aktiv. HTTP-Header müssen vor den Textdaten gesendet werden, sie müssen jedoch nicht gesendet werden, bevor der Puffer zum ersten Mal geleert wird.
Wenn man das alles zusammennimmt, wird man sehen, dass es nicht automatisch ermittelt werden kann, wenn die gesamte geschriebene Menge die Puffergröße nicht überschreitet und wir nie aufrufen flush
,那么在所有数据准备好之前不需要发送标头,此时点我们知道内容的长度。如果写入的总量大于缓冲区大小,则必须在知道内容长度之前发送标头,因此 responsewriter
.
Dies ist unter net/http/server.go
net/http/server.go
。具体来说,这里是缓冲区大小的声明,以及实现部分缓冲写入行为的 nchunkedwriter
. Im Einzelnen finden Sie hier die Deklaration der Puffergröße und des nchunkedwriter
, der das teilweise gepufferte Schreibverhalten implementiert:
// This should be >= 512 bytes for DetectContentType, // but otherwise it's somewhat arbitrary. const bufferBeforeChunkingSize = 2048 // chunkWriter writes to a response's conn buffer, and is the writer // wrapped by the response.w buffered writer. // // chunkWriter also is responsible for finalizing the Header, including // conditionally setting the Content-Type and setting a Content-Length // in cases where the handler's final output is smaller than the buffer // size. It also conditionally adds chunk headers, when in chunking mode. // // See the comment above (*response).Write for the entire write flow. type chunkWriter struct {
Quellcode-Link für 1.19.5. Bitte beachten Sie, dass sich der Quellcode mit jeder Go-Version ändern kann.
Das obige ist der detaillierte Inhalt vonWenn Golang http ResponseWriter 2 KB nicht überschreitet, warum wird die Inhaltslänge dann automatisch hinzugefügt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



OpenSSL bietet als Open -Source -Bibliothek, die in der sicheren Kommunikation weit verbreitet sind, Verschlüsselungsalgorithmen, Tasten und Zertifikatverwaltungsfunktionen. In seiner historischen Version sind jedoch einige Sicherheitslücken bekannt, von denen einige äußerst schädlich sind. Dieser Artikel konzentriert sich auf gemeinsame Schwachstellen und Antwortmaßnahmen für OpenSSL in Debian -Systemen. DebianopensL Bekannte Schwachstellen: OpenSSL hat mehrere schwerwiegende Schwachstellen erlebt, wie z. Ein Angreifer kann diese Sicherheitsanfälligkeit für nicht autorisierte Lesen sensibler Informationen auf dem Server verwenden, einschließlich Verschlüsselungsschlüssel usw.

In dem Artikel wird erläutert, wie das PPROF -Tool zur Analyse der GO -Leistung verwendet wird, einschließlich der Aktivierung des Profils, des Sammelns von Daten und der Identifizierung gängiger Engpässe wie CPU- und Speicherprobleme.Character Count: 159

In dem Artikel werden Schreiben von Unit -Tests in GO erörtert, die Best Practices, Spottechniken und Tools für ein effizientes Testmanagement abdecken.

Dieser Artikel zeigt, dass Mocks und Stubs in GO für Unit -Tests erstellen. Es betont die Verwendung von Schnittstellen, liefert Beispiele für Mock -Implementierungen und diskutiert Best Practices wie die Fokussierung von Mocks und die Verwendung von Assertion -Bibliotheken. Die Articl

In diesem Artikel werden die benutzerdefinierten Typ -Einschränkungen von GO für Generika untersucht. Es wird beschrieben, wie Schnittstellen die minimalen Typanforderungen für generische Funktionen definieren und die Sicherheitstypsicherheit und die Wiederverwendbarkeit von Code verbessern. Der Artikel erörtert auch Einschränkungen und Best Practices

In dem Artikel wird das Reflect -Paket von Go, das zur Laufzeitmanipulation von Code verwendet wird, von Vorteil für die Serialisierung, generische Programmierung und vieles mehr. Es warnt vor Leistungskosten wie langsamere Ausführung und höherer Speichergebrauch, beraten die vernünftige Verwendung und am besten am besten

In diesem Artikel wird die Verwendung von Tracing -Tools zur Analyse von GO -Anwendungsausführungsfluss untersucht. Es werden manuelle und automatische Instrumentierungstechniken, den Vergleich von Tools wie Jaeger, Zipkin und Opentelemetrie erörtert und die effektive Datenvisualisierung hervorheben

In dem Artikel werden mit Tabellensteuerungstests in GO eine Methode mit einer Tabelle mit Testfällen getestet, um Funktionen mit mehreren Eingaben und Ergebnissen zu testen. Es zeigt Vorteile wie eine verbesserte Lesbarkeit, verringerte Vervielfältigung, Skalierbarkeit, Konsistenz und a
