Seite 1 von 1

Benötige "Accept-Ranges"

Verfasst: Mi, 20. Dez 2017 23:54
von ramses
Hallo

Der neue Firefox in der 64 Bit Version erfordert dass für die übertragung grösseren Inhalten das Range Bytes "Accept-Ranges" im Header gesetzt ist und der Server dies unterstüzt. Mit "Ranges" kann der Browser Dateien in Teilen anfordern.
XB2 unterstüzt dieses nicht. Das hat zur folge dass die entsprechenden Inhalte dann nicht oder nur teilweise verfügbar sind.

Hat dies schon jemand gelöst? Bezw. eine entsprechende Erweiterung geschrieben?

Beim Einsatz von Chrome, Edge, IExporer und Firefox 32Bit tritt das Problem nicht auf bezw. diese verwenden "Range" nicht.

Gruss Carlo

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 0:42
von DelUser01
Hallo Carlo

wo bist Du da wieder drübergestolpert
ramses hat geschrieben: Mi, 20. Dez 2017 23:54...Firefox...Range Bytes "Accept-Ranges" im Header...XB2 unterstüzt dieses nicht...
Was hat jetzt Firefox mit XB2 zu tun?

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 6:39
von ramses
Hallo Roland

Firefox ist der Client, eine App mit xb2.net ist der WebServer. Wenn du in Firefox eine Seite öffnest muss der Websever diverse Files an den Client senden. Für Inhalte möchte Firefox in einem GET Request nun auch nur Teile einer Datei abrufen können. Siehe: RFC2616 Kapitel 14.16 Content-Range

Wir, ich mit Xbase und 2 Html/Css/Javascript Profis sind am umschreiben einer Xbase-ADS-Gui-App auf eine reine Web-App mit Postgresql dabei sind wir darüber gefallen dass Firefox nach einem Update Inhalte nicht mehr korrekt verarbeitet hat und mit anderen Browsern die Probleme nicht da waren. Die Analyse hat dann obige Ursache gezeigt. Bei Chrome steht vermutlich diese Änderung auch noch an, der sendet immer Range: 0- was bedeutet die ganze Datei. Wir planen über die Festage das Roll-Out der App um die Mitarbeiter ab dem 27. bei der folgenden Inventaraufnahme zu beobachten .......... Da sind wir ziemlich spät über diese Erkenntnis "gestolpert" .....

Gruss Carlo

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 7:18
von brandelh
Ich selbst nutze zwar nicht XB2, sondern schreibe CGI EXE, die auf die Anforderungen des Browsers reagieren und die Antwort zurücksenden,
aber genau das dürfte bei XB2 auch nicht anders sein. Du musst dieses Feld auswerten und die Antwort irgendwie begrenzen ...
wie genau müsste dann wohl in einer Beschreibung zu dem Feld stehen. Wobei mich schon wundert, dass ausgerechnet die 64-Bit Version weniger anfordern soll, als die 32-Bit.
Und was genau ist damit gemeint, ein Teil einer WEB-Site, ein Teil eines Bildes ?

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 7:38
von Martin Altmann
Carlo,
was spricht dagegen, bei deinen HTML-Seiten (die ja unter Deinem Xb2.NET-Server generiert werden), den Headereintrag explizit abzuschalten?
Also "Accept-Ranges: None" einzufügen?
Damit machst Du dem Client klar, dass dieses Feature nicht unterstützt wird!

Hubert,
das dient zum Beispiel dazu, einen abgebrochenen Abruf einer Seite an der Stelle fortzuführen, an dem er unterbrochen wurde. :arrow: https://developer.mozilla.org/en-US/doc ... ept-Ranges

Viele Grüße,
Martin

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 7:45
von ramses
Hallo Hubert
Und was genau ist damit gemeint, ein Teil einer WEB-Site, ein Teil eines Bildes ?
Files, die grösser als 4-5MB sind, die genaue Grenze habe ich nicht gefunden.
die 64-Bit Version weniger anfordern soll
Nein nicht weniger sondern anders. Er fordert als erstes die ganze Datei an: bytes=0- bricht dann aber die übertragung während der Darstellung des Inhalts ab und fordert später den rest der Datei auch noch an z.B. bytes:4175600-
Ist "Accept-Ranges" nicht gesetzt wird der Rest nicht angefordert und auch nicht dargestellt.
So lässt sich vermutlich der Seitenaufbau des sichtbaren Bereichs wesentlich beschleunigen.
Ich habe gehofft dass jemand diese Art GET Request bereits umgesetzt hat. Was zu tun ist ist in der RFC2616 14.16 recht gut beschrieben.

Hallo Matin

Danke für den Tip. Werde ich gleich Testen.


Gruss Carlo

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 8:06
von ramses
Hallo Martin

Leider wird "None" ignoriert. Das Verhalten ist so wie wenn Accept-Range nicht gesetzt ist.

Ich habe gestern bei der Recherche den kurzen Hinweis:
Your server must enable Range requests.
gefunden.

Ich versuche heute mal die Methode xbHTTPThread:SendFile() zu überarbeiten und Ihr Accept-Range=bytes beizubringen.

Dennoch danke für deinen Typ.

Gruss Carlo

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 8:12
von Martin Altmann
Ich gehe davon aus, dass Du "none" geschrieben hast - alles klein und in " eingefasst.
Oder?
:arrow: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html - Abschnitt 14.5

Viele Grüße,
Martin

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 8:52
von ramses
Hallo Martin

ich habe dazu die zugehörige Funktion verwendet:

oResponse:SetHeader( "Accept-Ranges", "none" )

Die kommt im Firefox auch richtig an, im Debugger unter Antwortkopfzeilen steht: Accept-Ranges: none

Dies wird aber nicht berücksichtigt. Scheinbar muss wirklich zwingend die "bytes" unterstützt werden.

Gruss Carlo

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 9:29
von Tom
Wie merkst Du, dass es nicht berücksichtigt wird?

Ranges sind ziemlich gut, wenn man wirklich große Dokumente vorhalten muss. Das dürfte sich auch vergleichsweise leicht umsetzen lassen, weil der Client ja konkret sagt, welchen Range er erhalten will, so dass man nur die fragliche Portion aus dem Dokument ausschneiden und senden muss. Die Alternative sind Chunks, aber das passiert dann serverseitig (wenn es vom Client unterstützt wird). 0-Chunks kann man außerdem verwenden, wenn es sehr lange dauert, die Antwort zu generieren, und Timeouts vermieden werden sollen.

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 9:46
von ramses
Hallo Tom
Wie merkst Du, dass es nicht berücksichtigt wird?
er (Firefox) holt sich 4.9 MB vom aktuellen Dokument (11.1 MB) und tut dann nichts mehr.

Wenn ich Accept-Ranges auf bytes setzte sendet er wenig später einen weiteren Request für den Rest des Dokuments da mein Code dies noch nicht unterstützt und nun erneut die Datei von Anfang an sendet gibts ein Chaos ....

Ich ändere jetzt die Methode xbHTTPThread:SendFile() in xb2net entsprechend für Ranges ab und hoffe dass dies das Problem beseitigt.

Gruss Carlo

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 10:09
von brandelh
Seit wann darf ein Browser Client entscheiden, was der Server zu liefern hat ?

Der Server muss das abschalten können.

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 10:15
von brandelh

Code: Alles auswählen

14.5 Accept-Ranges
      ...
      Servers that do not accept any kind of range request for a
      resource MAY send
          Accept-Ranges: none
      to advise the client not to attempt a range request.
wenn der Firefox 64 bit damit nicht klar kommt, liegt ein Programmfehler seinerseits vor.

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 10:15
von Tom
@Hubert: Kann er nicht. Accept-Ranges ist ein Merkmal im Header des Dokuments, das der Server sendet. Wenn es nicht vorhanden ist oder auf "none" steht, sollte der Client auch nicht versuchen, in Häppchen abzurufen.

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 11:12
von ramses
Hallo

wie Tom auch schreibt: Steht das Argument auf "none" oder ist nicht vorhanden versucht der Browser nicht Häppchen abzurufen. Er ruft einfach nur den ersten Teil ab. Wenn "Mann" oder "Frau" den Rest auch sehen will muss auf dem Server Range auf byte gesetzt werden. Zwangsumstellung eben .....

Die aktuelle 32 Bit Version 52.5.2 hat dieses Verhalten nicht. Die funktioniert einwandfrei. Erst die 64 Bit Version 57 brachte dieses neue Verhalten.

Gruss Carlo

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 11:31
von HaPe
Hallo Carlo !
wenn der Firefox 64 bit damit nicht klar kommt, liegt ein Programmfehler seinerseits vor.
Erst die 64 Bit Version 57 brachte dieses neue Verhalten.
Probier doch mal die 64-Bit-Beta-Version aus; ist aktuell die 58.0b12.

Oder du kannst mir die URL zukommen lassen falls die Seite im Internet liegt und keine Zugangsdaten benötigt ...

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 11:57
von ramses
Hallo Hans-Peter

danke für den Tip. Habe mit der beta getestet. Ist das selbe.
Anscheinend ist es heute normal dass Accept-Ranges grundsätzlich auf Bytes gesetzt ist. Ich habe im Inhalt einiger Webseiten nachgeschaut der Parameter ist überall auf Bytes gesetzt. Mit None habe ich nichts gefunden.

Auch hier im Forum ist Bytes gesetzt. Sogar für kleine gif Dateien.


Gruss Carlo

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 12:26
von Martin Altmann
Carlo,
im RFC ist none ein valider Wert! Wenn der Client damit nicht klarkommt, ist es ein Problem des Clients!
Es könnte auch sein, dass es einen weiteren Parameter im Header gibt, der in dem Fall ebenfalls entsprechend gesetzt sein muss - so genau habe ich mir die RFC nicht durchgelesen.

Viele Grüße,
Martin

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 13:05
von ramses
Hallo Martin
Wenn der Client damit nicht klarkommt, ist es ein Problem des Clients!
Da bin ich mit dir absolut der gleichen Meinung. Nur das zu Wissen zeigt mir das Problem aber bringt mir die App aber nicht wieder zum laufen.

Der Parameter ist schon alleine einsetzbar.

Die RFC2616 stammt aus der Steinzeit aus dem letzten Jahrtausend! Im laufe der letzten Jahre wurden sicher viele der Parameter daraus nicht mehr vollständig umgesetzt bezw. es wird heute als minimalanforderung von gewissen gesetzten Parametern ausgegangen, wie hier, um z.B. Ladezeiten zur verbessern und dem User den Anfang schon anzuzeigen vor alles übertragen ist. Dieses Ziel hat Firefox 57 sehr gut erreicht.

Leider ist es schlussendlich aber nicht so einfach ein Problem des Clients. Sondern meins!!!

Was würdest du tun?



Gruss Carlo

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 13:39
von Martin Altmann
Hallo Carlo,
ramses hat geschrieben: Do, 21. Dez 2017 13:05Was würdest du tun?
für Dich gibt es mehrere Möglichkeiten.
Die einfachste (in Deinem Fall auch machbar, da es bei Dir ja scheinbar nur um Zugriffe aus dem Intranet geht): Für die Anwendung einen anderen Browser als Firefox nutzen!
Du solltest auf jeden Fall auch mal in Boris' Newsgroup posten (falls noch nicht geschehen).
Du könntest auch (wie bereits von Dir angedacht) die SendFile()-Methode anpassen - oder mit :FilterRequest() arbeiten und den eingehenden Verkehr entsprechend parsen und reagieren. Dabei gibt es nur ein (nicht unwesentliches) Problem mit dynamischen HTML-Seiten: Du kannst nicht garantieren, dass bei einer dynamischen HTML-Seite das Byte 768 das selbe Byte ist, wenn diese Seite erneut abgerufen wird! Also müsstest Du ggf. dynamisch generierte Seiten für jede aktive Session auf dem Server statisch vorhalten - zumindest für einen gewissen Zeitraum.
Im übrigen habe ich hier im Forum den Headereintrag nicht gefunden (zumindest nicht, wenn ich mir im IE 11 den source dieser Seite oder der Hauptseite anschaue).

Viele Grüße,
Martin

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 13:47
von brandelh
Wenn ich es verbessern könnte, würde ich das auch machen, ansonsten darauf verweisen, dass der FireFox 64 bit dieser Version wohl einen Fehler hat, mit den anderen geht es ja auch.

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 18:08
von ramses
@Martin

du musst nicht den Sourcecode der Seite anschauen sondern den Datentransfer mit dem Debugger.
Im Firefox Taste F12

BSP:
range-bytes.jpg
range-bytes.jpg (72.23 KiB) 15498 mal betrachtet
Gruss Carlo

Re: Benötige "Accept-Ranges"

Verfasst: Do, 21. Dez 2017 19:36
von Martin Altmann
Da dort nichts explizit im Source steht, wird es wohl default sein (je nach Konfig Webserver).

Viele Grüße,
Martin

Re: Benötige "Accept-Ranges"

Verfasst: Fr, 22. Dez 2017 19:40
von ramses
Hallo Martin

mittlerweile habe ich das Problem durch Anpassung der Methode sendfile() im Server-Code gelöst.

Das Problem ist folgendes: Enthält ein GET Request Header den Eintrag "Range: bytes=0-" MUSS der Server eine entsprechende Anwort liefern.
Anscheinend gehen die Browser davon aus dass die Server dies Unterstützen und senden "Range.." ohne dies mit einer vorausgehenden Anforderung zu prüfen.

Die Infos und genauen Details sowie den angepassten Code habe ich auch an Boris gesandt.

Gruss Carlo