Mithilfe der HTTP-Range-Header mit einer Bandbreite Planer andere als bytes?
Die Kern-Frage ist, über die Verwendung der HTTP-Header, einschließlich BereichIf-RangeAccept-Ranges und einen Benutzer-definierten Bereich Planer.
Hier ist ein hergestellt Beispiel zur Veranschaulichung meiner Frage. Angenommen ich habe eine Web-2.0-Stil-Anwendung, die zeigt eine Art von Menschen lesbare Dokumente. Diese Dokumente sind redaktionell aufgeteilt in Seiten (ähnlich wie Artikel, die Sie sehen, auf news-Webseiten). Für dieses Beispiel gehen wir davon aus:
- Es ist ein Dokument mit dem Titel "HTTP-Range-Frage" ist aufgeteilt in drei Seiten.
- Der shell-Seite (
/document/shell/http-range-question
) kennt die meta-Informationen über das Dokument, einschließlich der Anzahl der Seiten. - Die erste lesbare Seite der das Dokument geladen ist, während die Seite ein onload-Ereignis über eine ajax BEKOMMEN und eingefügt auf der Seite.
- Ein UI-Steuerelement, das aussieht wie [ 1 2 3 ] ist am unteren Rand der Seite, und klicken Sie auf eine Nummer wird angezeigt, dass die Seite lesbar (auch per ajax geladen), und klicken Sie auf "Alle" zeigt das gesamte Dokument. Übernehmen Sie diese URLS für die 1 -, 2 -, 3-und Alle Anwendungsfälle:
/document/content/http-range-question?page=1
/document/content/http-range-question?page=2
/document/content/http-range-question?page=3
/document/content/http-range-question
Nun zu der Frage. Kann ich mit dem HTTP Range-Header statt Teil der URL (z.B. einen querystring-parameter)? Vielleicht etwas wie dieses auf der GET /document/content/http-range-question
Anfrage:
Range: page=1
Sieht es aus wie die spec definiert nur byte-ranges-als zulässige, also selbst wenn ich meine ajax-Aufrufe arbeiten mit dem browser und server-code, etwas in der Mitte konnte den Vertrag zu brechen (z.B. ein caching-proxy-server).
Range: bytes=0-499
Irgendwelche Meinungen oder realen Welt Beispiele von benutzerdefinierten Bereich Definitionen?
Update: ich habe eine ähnliche Frage über den Range-header ( Paging in eine Rest-Sammlung ), wo Sie erwähnen, dass das Dojo ist JsonRestStore verwendet eine benutzerdefinierte Range-header-Wert.
Range: items=0-24
InformationsquelleAutor der Frage Kevin Hakanson | 2009-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Absolut - Sie sind frei, geben Sie eine beliebige Reihe von Einheiten, die Sie mögen.
Vom RFC 2616:
Den key piece ist der Letzte Absatz. Wirklich, was es sagt, ist, dass, wenn Sie schrieb die Spezifikation für HTTP/1.1, die Sie nur grob umrissen das "bytes" - token. Aber, wie Sie sehen können, von der 'anderen-range-Einheit" bit, Sie sind frei zu kommen mit Ihren eigenen token Bezeichner.
Coming up mit Ihrem eigenen Sortiment Bezeichner bedeutet, dass Sie haben die Kontrolle über die client-und server-code, der verwendet, dass die Planer. So, wenn Sie die backend-Stück entlarvt das "/document - /content - /http-range-Frage" URI, du bist gut zu gehen; vermutlich sind Sie über ein modernes web-framework, das können Sie überprüfen in den Kopfzeilen der Anfrage kommen. Man könnte dann schauen Sie auf die Spektrum-Werte zur Durchführung der backing-Abfrage korrekt.
Darüber hinaus, wenn Sie die Kontrolle der AJAX-code die Anfragen an das backend, sollten Sie in der Lage sein, den Range-header selbst.
Aber es ist ein potenzieller Nachteil, die Sie erwarten, in Ihrer Frage: das Potenzial, zu brechen-caching. Wenn Sie eine benutzerdefinierte Palette Einheit, alle caches zwischen Ihrem client und dem Ursprungs-Server "ignorieren KANN, reicht die Angabe des [anderen Einheiten als 'bytes']". So zum Beispiel, wenn Sie hatte ein Squid/Varnish cache zwischen front-und backend, es gibt keine Garantie, dass die Ergebnisse, die Sie hoffen, wird aus dem cache bereitgestellt werden!
Sie könnten auch erwägen eine alternative Implementierung, wo, anstatt mit einem query-string, machen Sie die Seite "parameter" des URI; z.B.: /document - /content - /http-range-Frage/Seite/1. Dies würde wahrscheinlich ein wenig mehr Arbeit für Sie server-Seite, aber es ist HTTP/1.1-kompatibel und die caches sollten ihn richtig zu behandeln.
Hoffe, das hilft.
InformationsquelleAutor der Antwort invertedlambda
HTTP-Bereich ist in der Regel verwendet für die Wiederherstellung von unterbrochenen downloads, ohne von vorne beginnen von Anfang an.
Was Sie zu tun versuchen würden sein besser behandelt OAI-OREdie Ihnen ermöglicht, definieren Sie Beziehungen zwischen mehreren Dokumenten. (alternative Formate, Komponenten, etc)
Leider, es ist ein relativ neues Metadaten-format, und ich weiß nicht, von jedem web-Browser, die das Schiff mit nativer Unterstützung.
InformationsquelleAutor der Antwort Joe
bytes ist die einzige Einheit unterstützt die HTTP 1.1-Spezifikation.
InformationsquelleAutor der Antwort Akshay Sahu
Klingt es wie Sie wollen, ändern Sie die HTTP-Spezifikation nur zum entfernen eines querystring-parameter. Um dies zu tun, müssten Sie den code ändern, der auf dem client zum senden der geänderten header und der server zum Lesen aus der "Range" - header anstelle der querystring.
Das Endergebnis ist, dass dies wahrscheinlich funktionieren, aber du brichst alle standards und die bestehenden tools zu tun.
InformationsquelleAutor der Antwort David