Невозможно проверить загрузку файлов через HTTP PUT через Squid Proxy

1670
Harry

Я могу загрузить файл на свой веб-сервер Apache, используя Curl:

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

Однако если я поставлю прокси-сервер Squid между ними, я не смогу:

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

Curl сообщает о следующей ошибке:

Примечание. Этот ответ об ошибке был в формате HTML, но я удалил теги для удобства чтения.

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.  

Мои squid.confне кажется, имея ACL / правила, которые должны разрешаем на основе srcили dstIP - адреса, или тому protocol, или HTTP method... как я могу сделать HTTP POSTочень хорошо между тем же клиентом и веб - сервером, с тем же прокси сидит между ними.

В случае сбоя HTTP PUT, чтобы увидеть трафик запросов и ответов, который на самом деле происходил, я поместил netcatпроцесс между Curl и Squid, и вот что я увидел:

Запрос:

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 

Отклик:

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> 

Примечание. Я сделал анонимными IP-адреса и имена серверов для удобства чтения.

Примечание. Я также разместил этот вопрос в StackOverflow, но не получил никакого полезного ответа. Публикуйте его здесь, на случай, если люди в StackOverflow видят в этом вопрос, не связанный с программированием, и не проявляющий интереса.

0

1 ответ на вопрос

0
Harry

Thanks to Amos Jeffries for answering this on squid-users forum. He said:

Curl is attempting to use HTTP/1.1 features which 2.6 does not support (Expect:100-continue, Transfer-Encoding:chunked), and is too old to even have proper workarounds for broken clients. Your request won't work due to these even if PUT was okay.

Please upgrade. squid-2.7/3.1 are still HTTP/1.0 but have some hacks to workaround the HTTP/1.1 features curl is asking for. Squid-3.2 (beta) has HTTP/1.1 support.

Похожие вопросы