On Wednesday 10 July 2002 18.40, Miklos Magyari wrote:
> This message is originated from the parent proxy that serves my
> squid (it's a non-squid cache)
> So it seems that sometimes squid sends malformed requests; it
> inserts some strings before the HTTP GET.
More likely the parent proxy misunderstood a previous request on the 
same TCP connection.
Try disabling server_persistent_connections in squid.conf. Might help 
to work around the problem.
You can also try enabling broken_posts in squid.conf..
but before you try working around the problem, please collect some 
data as described below.
> Can someone help me to track down the problem (my guess that it's a
> squid bug)?
Most likely the source of the error is a POST request prior to the 
failing one. To tell who is at fault a detailed HTTP protocol 
analysis is required.
Start by saving the traffic to/from your parent proxy to a file.
tcpdump -s 1600 -w trace.log host your.parent.proxy
make it fail one or two times.
use ngrep -I trace.log to identify the TCP connections. The output 
will look something like
T 192.36.125.18:80 -> 10.1.1.3:40070 [AP]
  HTTP/1.1 50X Invalid request.....The system dete
  cted HTTP Error Invalid Request while attempting
  to retrieve the URL: ....
Note the local port number (40070 in the output above)
Extract the request stream for this connection alone  
 tcpdump -r trace.log -w request_trace.log tcp src port 
the_number_noted_above
Verify that you have got the whole connection, including the initial 
SYN handshake
  tcpdump -n -r request_trace.log
the first line in the output should look like
16:04:54.295597 10.1.1.3.40070 > 192.36.125.18.http: S
and should be followed by a couple of lines like the following 
examples
16:04:54.321391 10.1.1.3.40070 > 192.36.125.18.http: . ack
16:04:57.466579 10.1.1.3.40070 > 192.36.125.18.http: P 0:20(20) ack 
16:04:57.672753 10.1.1.3.40070 > 192.36.125.18.http: P 20:22(2) ack 
and finally a FIN
16:04:57.712067 10.1.1.3.40070 > 192.36.125.18.http: F 22:22(0) ack 
If you don't get all of this, repeat the procedure until you do.
then decode request_trace.log into human readable form by using 
ngrep..
  ngrep -I request_trace.log
and send me the output in private, or decode it yourself to see if 
there is any HTTP protocol violations.
When sending me the output you may overwrite characters in the data to 
hide private data, but it is very important that you do not 
add/delete any characters. The character count in the packet data 
must exacly match the output of ngrep, or else it won't be possible 
to analyze the HTTP protocol correctly. Also, please send it as a 
gzipped attachment to protect from mail systems messing around with 
the data..
Regards
Henrik
Received on Thu Jul 11 2002 - 08:27:50 MDT
This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 17:09:13 MST