Why does squid reject this multipart-form-data POST from curl

curlPROXYsquid

This fails:

$ curl --trace multipart-fail.log -F "source={}" http://127.0.0.1:3003/jslint

With a squid status 417 error, ERR_INVALID_REQ.

I've never had this in practice through a web browser, so it's probably curl usage instead of squid, but if I tell curl not to use the squid proxy, the web application on the other end accepts it just fine.

(If there's a more appropriate StackExchange site for this, please let me know.)

Best Answer

Squid doesn't support Expect: 100-continue, being a HTTP/1.0 device. Notice the response status code 417 Expectation failed.

Curl should retry the request automatically, but it doesn't; instead, you need to suppress the Expect header; e.g.,

curl -H "Expect:" --trace multipart-fail.log -F "source={}" http://127.0.0.1:3003/jslint