Keep-Alive-Header-Klärung

106

Ich wurde gebeten, eine Site zu erstellen, und einer der Mitentwickler sagte mir, dass ich den Keep-Alive-Header einfügen müsste.

Nun, ich habe viel darüber gelesen und habe immer noch Fragen.

msdn ->

Die offene Verbindung verbessert die Leistung, wenn ein Client mehrere Anforderungen für Webseiteninhalte stellt, da der Server den Inhalt für jede Anforderung schneller zurückgeben kann. Andernfalls muss der Server für jede Anforderung eine neue Verbindung öffnen

Anschauen

Geben Sie hier die Bildbeschreibung ein

  • Wenn der IIS (F) sendet keep aliveHeader ( oder Benutzer sendet Keep-Alive ), bedeutet es , dass ( E, C, B) speichert eine Verbindung , die nur für meine Session ist?
  • Wo werden diese Informationen aufbewahrt ( "diese Verbindung gehört zu" Royi " )?
  • Bedeutet dies, dass niemand diese Verbindung verwenden kann?
  • Wenn ja - bedeutet dies, dass der Keep-Alive-Header die Anzahl der überlappenden Verbindungsbenutzer verringert?
  • Wenn ja, wie lange wird die Verbindung für mich gespeichert? (Mit anderen Worten, wenn ich "Keep Alive" - ​​"Keep" bis wann einstelle?)

ps für diejenigen, die interessiert sind:

Wenn Sie auf diese Beispielseite klicken, wird der Keep-Alive-Header zurückgegeben

Royi Namir
quelle
2
Pfff, ich habe das in einem Vortrag gesehen, bin mir aber nicht ganz sicher. Ich dachte, das Keep-Alive sei nur auf dem Server und dem Benutzer. Schließlich sollte alles dazwischen nicht einmal wissen, dass es sich um HTTP handelt, geschweige denn um die Header.
Noctua
Die aus MSDN zitierte Aussage ist Trottel. Es ist der Client , der eine neue Verbindung öffnen muss, wenn keine Keep-Alive vorhanden ist.
Marquis von Lorne
Und wenn Sie eine Site erstellen, keinen Webserver oder Client, ist der Keepalive-Header bereits für Sie erstellt.
Marquis von Lorne

Antworten:

145

Wo werden diese Informationen aufbewahrt ("Diese Verbindung besteht zwischen Computer Aund Server F")?

Eine TCP-Verbindung wird anhand der Quell-IP und des Ports sowie der Ziel-IP und des Ports erkannt. Ihr Betriebssystem, alle sitzungsfähigen Zwischengeräte und das Betriebssystem des Servers erkennen die Verbindung daran.

HTTP funktioniert mit Anforderungsantwort: Der Client stellt eine Verbindung zum Server her, führt eine Anforderung aus und erhält eine Antwort. Ohne Keep-Alive wird die Verbindung zu einem HTTP-Server nach jeder Antwort geschlossen. Mit HTTP Keep-Alive halten Sie die zugrunde liegende TCP-Verbindung offen, bis bestimmte Kriterien erfüllt sind.

Dies ermöglicht mehrere Request-Response-Paare über eine einzelne TCP-Verbindung, wodurch ein Teil des relativ langsamen Verbindungsstarts von TCP entfällt.

Wenn der IIS (F) Keep-Alive-Header sendet (oder der Benutzer Keep-Alive sendet), bedeutet dies, dass (E, C, B) eine Verbindung speichern

Nein. Router müssen sich keine Sitzungen merken. Tatsächlich müssen nicht mehrere TCP-Pakete, die zu derselben TCP-Sitzung gehören, alle dieselben Router durchlaufen - das heißt, TCP muss sie verwalten. Router wählen einfach den besten IP-Pfad und leiten Pakete weiter. Keep-Alive ist nur für Client-, Server- und andere sitzungsbewusste Zwischengeräte vorgesehen.

Welches ist nur für meine Sitzung?

Bedeutet dies, dass niemand diese Verbindung verwenden kann?

Dies ist die Absicht von TCP-Verbindungen : Es handelt sich um eine End-to-End-Verbindung, die nur für diese beiden Parteien bestimmt ist.

Wenn ja - bedeutet dies, dass der Keep-Alive-Header die Anzahl der überlappenden Verbindungsbenutzer verringert?

Definieren Sie "überlappende Verbindungen". Unter HTTP-Permanent-Verbindung finden Sie einige Vor- und Nachteile, z.

  • Geringere CPU- und Speicherauslastung (da weniger Verbindungen gleichzeitig geöffnet sind).
  • Aktiviert das HTTP-Pipelining von Anforderungen und Antworten.
  • Reduzierte Netzwerküberlastung (weniger TCP-Verbindungen).
  • Reduzierte Latenz bei nachfolgenden Anforderungen (kein Handshake).

Wenn ja, wie lange wird die Verbindung für mich gespeichert? (Mit anderen Worten, wenn ich "Keep Alive" - ​​"Keep" bis wann einstelle?)

Eine typische Keep-Alive-Antwort sieht folgendermaßen aus:

Keep-Alive: timeout=15, max=100

Siehe beispielsweise HTTP-Keep-Alive-Header ( Hypertext Transfer Protocol) (ein Entwurf für HTTP / 2, in dem der Keep-Alive-Header ausführlicher erläutert wird als 2616 und 2086 ):

  • Ein Host setzt den Wert des timeoutParameters auf die Zeit, zu der der Host zulässt, dass eine inaktive Verbindung offen bleibt, bevor sie geschlossen wird. Eine Verbindung ist inaktiv, wenn keine Daten von einem Host gesendet oder empfangen werden.

  • Der maxParameter gibt die maximale Anzahl von Anforderungen an, die ein Client stellen wird oder die ein Server für die dauerhafte Verbindung zulassen kann. Sobald die angegebene Anzahl von Anforderungen und Antworten gesendet wurde, kann der Host, der den Parameter enthält, die Verbindung schließen.

Es steht dem Server jedoch frei, die Verbindung nach einer beliebigen Zeit oder Anzahl von Anforderungen zu schließen (solange er die Antwort auf die aktuelle Anforderung zurückgibt). Wie dies implementiert wird, hängt von Ihrem HTTP-Server ab.

CodeCaster
quelle
Definieren Sie "überlappende Verbindungen" ----> Ich meine gleichzeitig. (und ich denke, die Anzahl der gleichzeitigen Verbindungen wird reduziert, weil, wie Sie sagten: "Verbindung X ist für John reserviert, weil sie einen Keep-Alive-Header verwendet." .... habe ich recht?
Royi Namir
1
Sie sagen also, wenn der Server 100 Verbindungen gleichzeitig verarbeiten kann und alle diese Verbindungen Keep-Alive verwenden, wird die 101. Verbindung gelöscht.
Royi Namir
1
@ Royi nein, ich weiß nicht, wie viele Keep-Alive-Verbindungen ein Browser zu einem bestimmten Host herstellt, und ich wollte nicht sagen, dass ein Browser nur eine öffnet. Die Anzahl der gleichzeitig gestellten Anfragen ist begrenzt und variiert je nach Browser . Ich meinte, wenn ein Browser Keep-Alive-Verbindungen verwendet, kann er anstelle von NAnfragen über NVerbindungen ausgelöst werden (da die Verbindung standardmäßig nach jeder Antwort geschlossen wird), z. B. NAnfragen über N / Moder sogar nur MVerbindungen, da mehrere Anfragen ausgelöst werden können Jede geöffnete Verbindung kann also weniger verbrauchen.
CodeCaster
1
Ich weiß das. (:-)) Sie haben in Ihrem Kommentar gesagt: Ein Client stellt weniger simultane Verbindungen her, wenn er Keep-Alive verwendet. Er löst die Anforderungen seriell und nicht parallel aus . Ich verstehe einfach nicht, wie es mit Keepalive zusammenhängt.
Royi Namir
5
E, C, B speichern keine Sitzungen. Dies sind Router, sie haben keine Sitzungstabelle und müssen dies auch nicht, da mehrere Pakete von derselben TCP-Client-zu-Server-Sitzung möglicherweise unterschiedlichen Pfaden folgen. Die Rolle des Routers besteht darin, den besten IP-Pfad auszuwählen und das Paket entsprechend weiterzuleiten, damit es weder zur Transportschicht (TCP / UDP) noch zur Anwendungsschicht gelangt, um den Keep-Alive-Header anzuzeigen. Im Grunde genommen ist Keep-Alive explizit zwischen dem Client und dem Server und ermöglicht implizit, dass sitzungsbewusste Geräte - z. B. Firewalls - für diese explizite Client-zu-Server-Sitzung
geöffnet werden