AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdHTTP.AcceptEncoding ohne "Identity"???
Thema durchsuchen
Ansicht
Themen-Optionen

IdHTTP.AcceptEncoding ohne "Identity"???

Ein Thema von romber · begonnen am 26. Feb 2009 · letzter Beitrag vom 26. Feb 2009
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

IdHTTP.AcceptEncoding ohne "Identity"???

  Alt 26. Feb 2009, 14:15
Hallo!

Ich setzte manuell den AcceptEncoding-Header für IdHTTP:

IdHTTP1.Request.AcceptEncoding := 'gzip, deflate'; 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:

Delphi-Quellcode:
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;
Und trodzdem wird "Identity" hinzufügt. Wie kann ich das vermeiden?
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: IdHTTP.AcceptEncoding ohne "Identity"???

  Alt 26. Feb 2009, 15:24
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:
IdHTTP1.Request.AcceptEncoding := 'gzip, deflate;q=1.0, identity;q=0'; oder
IdHTTP1.Request.AcceptEncoding := 'gzip, deflate;q=1.0, *;q=0'; 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.

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.

Frederik
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: IdHTTP.AcceptEncoding ohne "Identity"???

  Alt 26. Feb 2009, 16:12
@Assertor

Vielen Dank für die Hilfe!

Ich meine aber, dass das Wort "Identity" überhaupt verschwinden soll.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

Re: IdHTTP.AcceptEncoding ohne "Identity"???

  Alt 26. Feb 2009, 19:18
Hi romber,

Zitat von romber:
@Assertor

Vielen Dank für die Hilfe!

Ich meine aber, dass das Wort "Identity" überhaupt verschwinden soll.
Bitte, gern!

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
Frederik
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#5

Re: IdHTTP.AcceptEncoding ohne "Identity"???

  Alt 26. Feb 2009, 19:53
Das habe ich auch gemacht. Habe die IdHTTP.pas in den Programmordner kopiert und o.g. Stelle deaktiviert. Es klappt nun.
Danke!
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#6

Re: IdHTTP.AcceptEncoding ohne "Identity"???

  Alt 26. Feb 2009, 19:58
Hi romber,

Zitat von romber:
Das habe ich auch gemacht. Habe die IdHTTP.pas in den Programmordner kopiert und o.g. Stelle deaktiviert. Es klappt nun.
Danke!
Keine Ursache, gerne! Ich diskutier gerad, ob wir das Identity ganz raus nehmen, ist ja per Default sowieso an... Dann muß Du in Zukunft nicht mehr für diesen Sonderfall patchen.

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: IdHTTP.AcceptEncoding ohne "Identity"???

  Alt 26. Feb 2009, 20:22
Zitat von Assertor:
Ich diskutier gerad, ob wir das Identity ganz raus nehmen, ist ja per Default sowieso an... Dann muß Du in Zukunft nicht mehr für diesen Sonderfall patchen.
Genau. Wenn AcceptEncoding nicht manuell gesetzt wurde, dann kann man "Identity" als Default lassen. Anderfalls den gesetzten AcceptEncoding benutzen.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#8

Re: IdHTTP.AcceptEncoding ohne "Identity"???

  Alt 26. Feb 2009, 20:38
Zitat von romber:
Zitat von Assertor:
Ich diskutier gerad, ob wir das Identity ganz raus nehmen, ist ja per Default sowieso an... Dann muß Du in Zukunft nicht mehr für diesen Sonderfall patchen.
Genau. Wenn AcceptEncoding nicht manuell gesetzt wurde, dann kann man "Identity" als Default lassen. Anderfalls den gesetzten AcceptEncoding benutzen.
Gute Idee. So werd ich das mal Durchboxen. Danke für die Anregung!

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz