The ICAP spec doesn't make any comment on what a proxy should do if an HTTP client aborts part way through a rewritten response.

i.e. the HTTP client had made a request which has been forwarded onto the web server, the web server has started responding, Squid is sending the response body to the RESPMOD ICAP service and is forwarding the modified body to the client. Part way through the download, the client (or maybe even the server?) drops the TCP connection. What should Squid do?

My testing shows that the response body that is being sent to the ICAP server is cut short by Squid, by terminating it with a zero-length chunk. This is also how fully successful ICAP requests are terminated and as the request has been terminated "normally", the ICAP connection can then be used for a new, unrelated, ICAP request.

But what if the ICAP server is doing some caching? It has no way to know whether it has seen the complete object, or if the object has been cut short.

So, my question is: is Squid doing the right thing here, and if so how should the ICAP server know whether or not it has seen the complete object from the web server? If the web server includes a Content-Length header then that could be compared to the final length of the body that the ICAP server has received, but this header is not mandatory and many requests do not include it.


The solutions that spring to my mind are:

1. Squid could just terminate the ICAP connection if the HTTP request is aborted. The ICAP server would then be able to see that the connection was chopped before it received the terminating zero length chunk. There may be a performance impact since Squid would need to establish a new connection for the next request.

2. Squid could add an "aborted" extension to the terminating chunk header. i.e. in the same way that "0; ieof" is allowed, "0; aborted" could be used. However, this is not part of the ICAP RFC and would therefore be non-standard behaviour that could break clients that have less robust parsers.

--
 - Steve Hill
   Technical Director
   Opendium    Online Safety / Web Filtering    http://www.opendium.com

   Enquiries:  sa...@opendium.com      +44-1792-824568
   Support:    supp...@opendium.com    +44-1792-825748


   Opendium Limited is a company registered in England and Wales.
   Company No. 5465437
   Highfield House, 1 Brue Close, Bruton, Somerset, BA10 0HY, England.
_______________________________________________
squid-dev mailing list
squid-dev@lists.squid-cache.org
http://lists.squid-cache.org/listinfo/squid-dev

Reply via email to