Ich habe widersprüchliche und etwas mehrdeutige Antworten auf die Frage "Wie wird eine mehrteilige HTTP-Anfrage Inhaltslänge berechnet?" gelesen. Speziell frage ich mich:
Kann jemand ein klares Beispiel geben, um diese Fragen zu beantworten?
Das folgende Live-Beispiel sollte hoffentlich die Fragen beantworten.
Die Google OAuth 2.0 Playground-Webseite ist eine hervorragende Möglichkeit, eine mehrteilige HTTP-Anfrage für die Google Drive-Cloud durchzuführen. Sie müssen dazu nichts von Google Drive verstehen - ich mache die ganze Arbeit für Sie. Wir sind nur an der HTTP-Anfrage und -Antwort interessiert. Mit dem Playground können Sie jedoch mit Multipart experimentieren und bei Bedarf weitere Fragen beantworten.
Ich habe eine lokale Textdatei mit dem Namen "test-multipart.txt" erstellt, die irgendwo in meinem Dateisystem gespeichert ist. Die Datei ist 34 Byte groß und sieht so aus:
%Vor%Zunächst öffnen wir den OAuth 2.0-Spielplatz von Google in einem Browser unter Verwendung der URL Ссылка :
Wählen Sie die Drive API v2 und die " Ссылка " aus und klicken Sie auf "APIs autorisieren":
Klicken Sie auf "Exchange-Autorisierungscode für Token":
Hier geben wir alle relevanten mehrteiligen Anfrage Informationen:
Googles OAuth 2.0 Playground fügt auf wundersame Weise alle erforderlichen Header ein, berechnet die Inhaltslänge, generiert eine Begrenzungssequenz, fügt die Begrenzungszeichenfolge ein und zeigt uns die Antwort des Servers:
Die mehrteilige HTTP-Anfrage ist mit einem 200-Statuscode erfolgreich abgeschlossen, so dass die Anfrage und die Antwort gut sind, auf die wir uns verlassen können. Google Playground fügt alles ein, was wir für den mehrteiligen HTTP-Upload benötigen. Sie können sehen, dass "Content-length" auf 352 gesetzt ist. Betrachten wir jede Zeile nach der Leerzeile nach den Headern:
%Vor%Es gibt neun (9) Zeilen, und ich habe "\ r \ n" am Ende jeder der ersten acht (8) Zeilen manuell hinzugefügt (aus Gründen der Lesbarkeit). Hier sind die Anzahl der Oktette (Zeichen) in jeder Zeile:
Die Summe der Oktette ist 344, und wenn wir jedes '\ r \ n' als einzelne Einoktettfolge betrachten, erhalten wir die begehrte Inhaltslänge von 344 + 8 = 352.
Um die Ergebnisse zusammenzufassen:
Wie Sie Content-Length
berechnen, hängt nicht vom Statuscode oder Medientyp der Payload ab; es ist die Anzahl der Bytes auf dem Draht. Also, komponieren Sie Ihre mehrteilige Antwort, zählen Sie die Bytes (und CRLF
zählt als zwei), und verwenden Sie das für Content-Length
.
Siehe: Ссылка
Wenn eine http-Nachricht Content-Length
header hat, gibt diese Kopfzeile die genaue Anzahl der Bytes an, die nach den HTTP-Headern folgen. Wenn irgendetwas entschieden würde, \r\n
als ein Byte zu zählen, dann würde alles auseinander fallen: Keep-Alive-HTTP-Verbindungen würden nicht mehr funktionieren, da HTTP-Stack nicht in der Lage wäre zu sehen, wo die nächste HTTP-Nachricht startet und zufällige Daten parsen würde als ob es eine HTTP-Nachricht wäre.
Tags und Links http-headers multipart content-length http-content-length