HTTP request, strange socket behavoir

Posted by hoodoos on Stack Overflow See other posts from Stack Overflow or by hoodoos
Published on 2010-03-30T07:35:59Z Indexed on 2010/03/30 7:43 UTC
Read the original article Hit count: 466

Filed under:
|
|

I expirience strange behavior when doing HTTP requests through sockets, here the request:

POST https://test.com:443/service/XMLSelect HTTP/1.1
Content-Length: 10926
Host: test.com
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)
Authorization: Basic XXX
SOAPAction: http://test.com/SubmitXml

Later on there goes body of my request with given content length. After that I recive something like:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Date: Tue, 30 Mar 2010 06:13:52 GMT

So everything seem to be fine here. I read all contents from network stream and successfuly recieve response. But my socket which I'm doing polling on switches it's modes like that:

write ( i write headers and request here )
read ( after headers sent i begin to recieve response )
write ( STRANGE BEHAVIOUR HERE. WHY? here i send nothing really )
read ( here it switches to read back again )

last two steps can repeat several times. So I want to ask what leads for socket's mode change? And in this case it's not a big problem, but when I use gzip compression in my request ( no idea how it's related ) and ask server to send gzipped response to me like this:

POST https://test.com:443/service/XMLSelect HTTP/1.1
Content-Length: 1076
Accept-Encoding: gzip
Content-Encoding: gzip
Host: test.com
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)
Authorization: Basic XXX
SOAPAction: http://test.com/SubmitXml

I recieve response like that:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Encoding: gzip
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Date: Tue, 30 Mar 2010 07:26:33 GMT

2000
?

I recieve a chunk size and GZIP header, it's all okay. And here's what is happening with my poor little socket meanwhile:

write ( i write headers and request here )
read ( after headers sent i begin to recieve response )
write ( STRANGE BEHAVIOUR HERE. And it finally sits here forever waiting for me to send something! But if i refer to HTTP I don't have to send anything more! )

What can it be related to? What it wants me to send? Is it remote web server's problem or do I miss something?

PS All actual service references and login/passwords replaced with fake ones :)

© Stack Overflow or respective owner

Related posts about http

Related posts about sockets