http - 无法通过 Squid 代理测试基于 HTTP PUT 的文件上传

标签 http upload proxy squid put

我可以使用 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. 

我的 squid.conf 似乎没有任何应该禁止基于 srcdst IP 地址的 ACL/规则,或者 protocol,或者 HTTP method... 因为我可以在同一个客户端和Web 服务器,中间使用相同的代理。

HTTP PUT 失败的情况下,为了查看实际发生的请求和响应流量,我在 Curl 和 Squid 之间放置了一个 netcat 进程,并且这是我看到的:

请求:

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 地址和服务器名称进行了匿名处理。

最佳答案

感谢 Amos Jeffries 在 squid-users forum 上回答这个问题.问题基本上是 3.1 版本之前的 Squid 没有实现 HTTP 1.1,因此拒绝分块传输编码。

关于http - 无法通过 Squid 代理测试基于 HTTP PUT 的文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568655/

相关文章:

http - 从 VBA (WinHTTP) 通过 HTTP 上传文件

javascript - 如何设置文本框值以使用 javascript 上传文件名?

html - 是否有 IIS 设置提示浏览器进入兼容模式?

node.js - 亚马逊 EC2 错误 : listen EACCES 0. 0.0.0:80

ajax - 通过 http 流式传输二进制数据

java - javaassist 和 cglib 的区别

apache - 如何使用 apache 2.2 创建代理?

http - 如何在 Rust 中使用 hyper、tokio 和 futures 为 HTTP 请求设置超时?

asp.net - 以编程方式设置要在网页中上传的文件名称

proxy - 在 ansible 剧本中动态设置 HTTP_PROXY