![]() |
IdHTTP.AcceptEncoding ohne "Identity"???
Hallo!
Ich setzte manuell den AcceptEncoding-Header für IdHTTP:
Delphi-Quellcode:
Mit einem Paketsniffer habe ich dann die Aufrufe beobachtet und rausgefunden, dass Indy trotz gesetzten AcceptEncoding-Header noch "Identity" dazu fügt. Daraufhin habe im Unit "IdHTTP" die folgenden Zeilen deaktiviert:
IdHTTP1.Request.AcceptEncoding := 'gzip, deflate';
Delphi-Quellcode:
Und trodzdem wird "Identity" hinzufügt. Wie kann ich das vermeiden?
if IndyPos('identity', Request.AcceptEncoding) = 0 then begin {do not localize}
if Request.AcceptEncoding <> '' then begin Request.AcceptEncoding := Request.AcceptEncoding + ', identity'; {do not localize} end else begin Request.AcceptEncoding := 'identity'; {do not localize} end; end; |
Re: IdHTTP.AcceptEncoding ohne "Identity"???
Hi romber,
auskommentieren brauchst Du das nicht! Identity Encoding wird nach RFC2616 immer akzeptiert, außer es ist explizit deaktiviert. Daher wird es zur Sicherheit, wenn nicht bereits vom Programmierer angegeben, angefügt - so erfüllt es in jedem Fall die RFC. Um Identitity-Encoding abzuschalten mußt Du also das AE für Identity deaktivieren z.B. mit:
Delphi-Quellcode:
oder
IdHTTP1.Request.AcceptEncoding := 'gzip, deflate;q=1.0, identity;q=0';
Delphi-Quellcode:
Wobei die erste Variante zwar Identity explizit deaktiviert, aber trotzdem noch neben gzip und deflate dem Server die Wahl weiterer Encodings läßt. Die zweite Variante erlaubt explizit nur gzip und komprimiertes Encoding, verweigert aber jedes andere Encoding.
IdHTTP1.Request.AcceptEncoding := 'gzip, deflate;q=1.0, *;q=0';
Wenn der Server sich an die Standards (RFC2616, s.o.) hält, müßte dann ein 406 ("Not Acceptable") als Fehler kommen wenn der Server in einem anderen Encoding senden will/muß. Gruß Assertor Edit: Gerade gesehen, wenn die Funktion wie oben gepostet noch in Indy steht würde das mit der RFC bei meiner 2. Variante kollidieren. Ich prüf das mal ab. Bis dahin also die erste Variante nehmen. Edit2: Ich hab das gerade dem Team weitergeleitet. Ich denke jetzt 1) Du hast was falsch verstanden bzgl. Identity (was immer an es, außer es it aus). Meine Beispiele sollten also richtig sein 2) trotzdem ich Dir danken muß, denn dadurch hab ich den Bug für meine o.g. 1. AE Variante entdeckt. :thumb: :dp: |
Re: IdHTTP.AcceptEncoding ohne "Identity"???
@Assertor
Vielen Dank für die Hilfe! Ich meine aber, dass das Wort "Identity" überhaupt verschwinden soll. |
Re: IdHTTP.AcceptEncoding ohne "Identity"???
Hi romber,
Zitat:
Wie gesagt: Da ist definitiv ein Bug drin für den Fall, daß q=0. Das wird jetzt geprüft und dann entsprechend gefixt. Aber, wenn "Identity" da vollständig verschwindet, bedeutet das technisch immer noch, daß der Server trotzdem mit Encoding "Identity" antworten darf. Im ganzen Indy-Source kommt übrigens außer an der von Dir genannten Stelle kein weiteres mal das Wort "Identity" vor. Von daher muß Du bestimmt nur Deine "gefixte" Datei ins Projektverzeichnis legen und das Projekt neu erstellen. Gruß Assertor |
Re: IdHTTP.AcceptEncoding ohne "Identity"???
Das habe ich auch gemacht. Habe die IdHTTP.pas in den Programmordner kopiert und o.g. Stelle deaktiviert. Es klappt nun.
Danke! |
Re: IdHTTP.AcceptEncoding ohne "Identity"???
Hi romber,
Zitat:
Gruß Assertor |
Re: IdHTTP.AcceptEncoding ohne "Identity"???
Zitat:
|
Re: IdHTTP.AcceptEncoding ohne "Identity"???
Zitat:
Gruß Assertor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz