Standard-Methode für HTTP-teilweise upload Lebenslauf upload
Ich bin die Entwicklung von http-client/server framework, und auf der Suche nach der richtige Umgang mit teilweise uploads (das gleiche wie für downloads per GET-Methode mit Range-header).
Aber, ein HTTP PUT, ist nicht vorgesehen, wieder aufgenommen werden.
Und PATCH-Methode, wie ich weiß, nicht akzeptieren Range-header.
Gibt es eine Möglichkeit, dies zu behandeln von HTTP-standard (nicht mit extension-Header oder etc)?
Vielen Dank im Voraus.
- Siehe @btimby die Antwort im Unterschied zwischen Content-Range-und Range-Header?.
- Vielen Dank für Ihren Kommentar. Ich gesehen, die Frage nach Unterschied und Antworten. Aber, es ist nicht klar, mit teilweise GESTELLT, da einige rfcs sagen, dass Content-range-header mit SETZEN ist nicht akzeptabel. Über die PATCH-Methode, ich habe nicht gesehen, alle Informationen über die Verwendung von Content-Range mit ihm.
- Die Skillung nicht verbieten, aber Sie müssen Fragen Sie Ihren server-das Handbuch, ob es implementiert wird oder nicht. Haben Sie vielleicht benutzerdefinierten code zu schreiben oder-Konfiguration je nach Ihren server-software und version.
- Ich bin writting http-client und-server, von Grund auf. Natürlich kann ich mit einigen nicht-standard-Erweiterung, aber wenn es ein standard-Weg, es ist immer besser, es zu benutzen.
- Dann erklären Sie, was Sie zu tun versuchen. Wenn Sie möchten, dass Ihre Kunden zu unterstützen, müssen Sie wissen, irgendwie ist der server Sie implementiert. Ist deine eigentliche Frage "zu erkennen, Wie ein HTTP-server unterstützt teilweise uploads mit der
Content-Range
header"? Wenn Sie möchten, dass Ihr server es unterstützt, nur die Umsetzung. - Vielen Dank für Ihren Kommentar. "Wie Sie erkennen ..." ist tatsächlich eine andere Frage. Zunächst war meine Frage, weil ich wissen muss, um standard-Methode für die partielle uploads, die akzeptabel ist meine alle gängigen http-server-Implementierungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, es gibt keinen standard für die partielle uploads:
Wenn man sich die Protokolle von Dropbox, google drive etc Sie alle Rollen selbst ein Protokoll zu übertragen, einzelne Dateien in mehrere Teile. Was Sie brauchen für resumeable uploads
Wie bereits in einigen der Kommentare, neuere Versionen des HTTP-Spezifikation geklärt haben dieses etwas. Pro Abschnitt 4.3.4 der RFC 7231:
Leider die Diskussion der range-Header Auftritt, im RFC 7233 konzentriert sich mehr oder weniger ganz auf GET-Anfragen, und RFC 5789 definiert fast nichts über den PATCH, außer, dass es insbesondere nicht erforderlich zum übertragen der gesamten Inhalte (darf aber), noch ist es erforderlich zu sein, idempotent (aber darf).
Die helle Seite ist, dass, weil die Flecken so Locker definiert, es hat Platz für den Ansatz in einer Antwort auf eine ähnliche Frage (https://stackoverflow.com/a/6711496/7467189): ändern Sie einfach "PUT", auf "PATCH". Zwar gibt es keine Vorschrift, dass ein server zu interpretieren, ein PATCH-request mit Content-Range-header diese Weise, ist es sicherlich eine gültige interpretation, nur nicht eine, die auf gebaut werden von beliebigen Servern oder clients. Aber in Fällen wie die ursprüngliche Frage, wo die Kontrolle der beiden enden verfügbar ist, ist es zumindest ein naheliegender Ansatz und nicht gegen die geltenden Normen.
Eine weitere überlegung ist, dass der Content-Type sollte Ausdrücken, was übertragen wird, anstatt den content-type des Unternehmens als ganzes (der RFC gibt einige Beispiele in dieser Hinsicht). Für den Inhalt ist "gepatcht" in beliebige Stücke, würde dies bedeuten application/octet-stream, zwar gibt es Szenarien, in denen der client und der server könnte mehr Inhalt-bewusst und entscheiden Sie sich zu schicken patches, die als Entitäten, die eine genauere definition (z.B. einzelne Seiten ein multi-page-image-format).
PATCH wäre eine logische Methode zu wählen, für fortsetzbare uploads: es erwartet Sie ein Medien-Typ, der angibt, wie ändern Sie die Ziel-Ressource. Auch wenn Sie nicht speziell definiert als format ausführen, patchen,
multipart/byteranges
gibt eine byte-Reihe und den Inhalt der Palette, so dass es entsprechend gut definiert für PATCH-Nutzlasten.Beispiel:
Diesem Beispiel uploads von zwölf bytes, die auf eine zehn-byte-offset.
THIS_STRING_SEPARATES
ist eine beliebige, vom Benutzer abgeholt Trennzeichen, und sollten zufällig generiert werden. Einige überschriften aus Platzgründen weggelassen, jede Zeile wird beendet mit ␍␊.Den Bereich von xxxx-yyyy-header oder die Reichweite xxxx - header mit PUT aktualisieren Teil einer Datei. Es wird unterstützt von Apache.
Nicht verwirrt durch die Aussage im RFC 7231, dass der Content-Bereich nicht verwendet werden. Das soll verhindern, Schlechtigkeit, indem Sie Kunden-Header vom server empfangen und mit PUT, um Sie zu senden zurück an den server. Diese Achtung ist nicht relevant für die Frage der Teiltöne Stellt.