3

Curl を使用して、Apache Web サーバーにファイルをアップロードできます。

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. 

またはIP アドレス、または、または HTTP に基づいて許可しないACL /ルールsquid.confないようです。間に座っているプロキシ。srcdstprotocolmethodHTTP 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 アドレスとサーバー名を匿名化しています。

4

1 に答える 1

2

squid-users forumでこれに回答してくれた Amos Jeffries に感謝します。問題は基本的に、バージョン 3.1 より前の Squid が HTTP 1.1 を実装していないため、チャンク転送エンコーディングを拒否することです。

于 2012-05-16T09:16:09.780 に答える