Fehler 417 Expectation Failed im Squid access.log

Problem :Anwendungen haben Problem mit einem Squid-Proxy, egal welche Authentifizierungsmethode (LDAP oder NTLM) genutzt wird.
Im Access.log des Squids findet sich zu diesen GET Requests dieser Fehler:

417 Expectation Failed.

Lösung :

Folgender Parameter wurde in der squid.conf implenetiert

#
ignore_expect_100 on!
#

Danach funktionierte auch der Zugriff für die Anwendung

Erklärung:

http://www.lug-erding.de/artikel/HTTPundSquid.html

Dieser Wert dient dazu, dass der Server, basierend auf einer Anfrage des Clients mit entsprechendem Headerfeld, antworten kann ob er den Request annehmen würde.
Wenn dem so ist, dann wird der Client den Request-Body an den Server senden.
Der Client sendet dazu im Header des GET Requests das Feld

Expect: 100-continue

mit.

Der Server antwortet mit 100 Continue, die Anfrage ist damit in Ordnung und kann gesendet werden oder er sendet ein 417 Expectation Failed.

Der RFC lässt nur die zwei Fälle zu, entweder 100 oder 417. Manche Webserver ignorieren aber das Expect und behandeln die Anfrage als eine gültige, die sie auch mit einem 2er Code beantworten. Viele ältere Clients schlucken das auch so. Squid hat das immer ignoriert oder genauer gesagt, er hat das Headerfeld einfach herausgefiltert. Seit Version 2.7 liefert er dann aber ein 417 zurück. Das ist zwar das korrekte Verhalten, sorgt aber dafür, dass der eigentliche Request nicht gesendet wird, während alte Webclients die 2er-Antwort geschluckt hatten.

Daher gibt es beim Squid die Konfigurationsoption ignore_expect_100 on welche das alte Verhalten wieder herstellt – auch wenn es explizit gegen den RFC-Standard verstößt.
Dabei wird das Expect-Headerfeld einfach herausgefiltert.