Der HTTP-PUT-basierte Dateiupload kann über Squid Proxy nicht getestet werden

1658
Harry

Ich kann eine Datei mit Curl auf meinen Apache-Webserver hochladen:

echo "[$(date)] file contents." | curl -T - http://WEB-SERVER/upload/sample.put 

Wenn ich jedoch einen Squid-Proxy-Server dazwischenstelle, kann ich nicht:

echo "[$(date)] file contents." | curl -x http://SQUID-PROXY:3128 -T - http://WEB-SERVER/upload/sample.put 

Curl meldet den folgenden Fehler:

Hinweis: Diese Fehlerantwort war im HTML-Format, aber ich habe die Tags zur besseren Lesbarkeit entfernt.

ERROR: The requested URL could not be retrieved  ERROR The requested URL could not be retrieved  While trying to retrieve the URL: http://WEB-SERVER/upload/sample.put  The following error was encountered: Unsupported Request Method and Protocol  Squid does not support all request methods for all access protocols. For example, you can not POST a Gopher request. Your cache administrator is root.  

Meine squid.confscheint keine ACL / Regel zu haben, die auf der Basis der srcoder der dstIP-Adressen oder der protocoloder der HTTP- Adresse nicht zulässig sein sollte method... da ich mit HTTP POSTdem gleichen Client und dem Webserver eine Ordnung erreichen kann Stellvertreter, der dazwischen sitzt.

Für den HTTP PUTFall, dass der Fall fehlgeschlagen ist, habe ich einen netcatProzess zwischen Curl und Squid eingefügt, um zu sehen, wie der Anfrage- und Antwortverkehr tatsächlich abläuft.

Anfordern:

PUT http://WEB-SERVER/upload/sample.put HTTP/1.1 User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 Host: WEB-SERVER Pragma: no-cache Accept: */* Proxy-Connection: Keep-Alive Transfer-Encoding: chunked Expect: 100-continue 

Antwort:

HTTP/1.0 501 Not Implemented Server: squid/2.6.STABLE21 Date: Sun, 13 May 2012 02:11:39 GMT Content-Type: text/html Content-Length: 1078 Expires: Sun, 13 May 2012 02:11:39 GMT X-Squid-Error: ERR_UNSUP_REQ 0 X-Cache: MISS from SQUID-PROXY-FQDN X-Cache-Lookup: NONE from SQUID-PROXY-FQDN:3128 Via: 1.0 SQUID-PROXY-FQDN:3128 (squid/2.6.STABLE21) Proxy-Connection: close  <SNIPPED the HTML error response already shown earlier above> 

Hinweis: Ich habe die IP-Adressen und Servernamen aus Gründen der Lesbarkeit durchweg anonymisiert.

Hinweis: Ich hatte diese Frage auch auf StackOverflow gepostet, erhielt aber keine hilfreiche Antwort. Postet es hier, falls die Leute bei StackOverflow dies als eine Frage der Programmierbarkeit sehen und nicht interessiert sind.

0

1 Antwort auf die Frage

0
Harry

Vielen Dank an Amos Jeffries für die Beantwortung im Squid-User-Forum . Er sagte:

Curl versucht, HTTP / 1.1-Funktionen zu verwenden, die von 2.6 nicht unterstützt werden (Expect: 100-continue, Transfer-Encoding: chunked) und ist zu alt, um überhaupt eine korrekte Problemumgehung für defekte Clients zu haben. Ihre Anfrage funktioniert nicht, auch wenn PUT in Ordnung war.

Bitte upgraden. Squid-2.7 / 3.1 ist immer noch HTTP / 1.0, hat aber einige Hacks für die Umgehung der HTTP / 1.1-Features, nach denen curl gefragt ist. Squid-3.2 (Beta) unterstützt HTTP / 1.1.