HTTP: Wie soll ich auf "Range: bytes=" antworten, wenn Range nicht unterstützt wird?

8

Wie lautet die richtige Antwort auf eine GET-Anfrage mit dem Header-Feld Range: bytes=278528- , wenn Range nicht unterstützt wird?

Lesen der HTTP-Header-Definitionen ( Ссылка ) ich denke, ich sollte mindestens setzen: Accept-Ranges: none , aber es ist klar, dass

  

Clients KÖNNEN Bytebereichsanforderungen generieren, ohne diesen Header für die betreffende Ressource erhalten zu haben.

Wenn also ein Client einen Bereich anfordert, sollte ich:

  • Antwort mit der ganzen Datei von Byte 0?
  • Antwort mit einem Statusfehler? (400/406/416/501) siehe: Ссылка
Joernsn 01.06.2011, 16:10
quelle

4 Antworten

7

Sie können es ignorieren, wie die Spezifikation sagt. Um genau zu sein:

  • Wenn Sie es unterstützen, geben Sie einen Statuscode 206 Partial Content zurück und enthalten die richtigen Header wie Content-Range.
  • Wenn Sie es nicht unterstützen, geben Sie wie üblich 200 OK zurück.

Ich habe das nicht getestet, aber die Spezifikation scheint ziemlich klar zu sein. Ich habe diese Arbeit gesehen - wget oder curl zu verwenden, um einen unterbrochenen Download fortzusetzen, wird von Anfang an ordnungsgemäß neu gestartet, wenn der Server den Range-Header nicht unterstützt.

    
Josh Lee 01.06.2011, 16:17
quelle
5

RFC2616 Abschnitt 14.35.2 sagt:

  

Ein Server darf den Range-Header ignorieren.

    
Nemo 01.06.2011 16:14
quelle
0

Das Ignorieren von Reichweitenanfragen kann Spielinhalte (die riesig sind) auf dem Airplay-Dienst oder einem anderen instabilen oder inakzeptablen machen. Ich weiß, dass http ist nicht richtig protokol, um Video zu übertragen, aber versuchen, Video zu Airplay vom Server zu senden nicht akzeptiert Bereiche .... Airplay verwendet Bereichsanfragen ...

    
Milan Jurkulak 05.10.2017 11:11
quelle
0

Die Möglichkeit besteht darin, den http-Header zu überprüfen und, falls es eine Range-Zeichenfolge gibt, diese zu parsen, Bereiche zu analysieren, Skip- und Take-Positionen zu berechnen, den Dateistream von URL zu öffnen und zu versuchen, die Bytes zu übernehmen Antwort von ihm, Antwort senden und schließlich nahe Strom. Vergessen Sie nicht, mit der Bereichsüberschrift zu antworten

ignorieren Sie nicht den Bereich, niemals wenn Sie an großen Streams arbeiten.

Wenn Sie nanohttp verwenden, kann ich Ihnen mit Beispiel

helfen     
Milan Jurkulak 06.11.2017 23:23
quelle