java上用socket访问http,遇到没有Content-Length的头部,read阻塞要很久
发送了对应的http请求头给服务器后 ;
就等服务器返回了 ;
服务器先返回了http的应答头 ;
因此只能通过readline或者read一个一个地读 ;
最后遇到 \r\n 之后表示头部已经读完了 ;
例如:
HTTP/1.1 200 OK
Date: Mon, 27 Oct 2014 09:11:39 GMT
Content-Type: application/xhtml+xml;charset=utf-8
Content-Length: 1528
Connection: Keep-Alive
Cache-Control: no-cache
Content-Encoding: gzip
X-Powered-By: HPHP
Server: apache
traceid: 1414401099045611930610476067223373565521
然后分析这个头 ;
找到Content-Length ;
根据Content-Length把剩下的数据读完 ;
然后关闭socket
这样就很快完成对网站数据的读取了 ;
但是一旦遇到这样的应答头 ;
HTTP/1.1 200 OK
Content-Type: application/xhtml+xml;charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
Vary: Accept-Encoding
Cache-Control: no-cache
Date: Mon, 27 Oct 2014 09:11:41 GMT
Server: apache
Version: HTTP/1.1
X-Powered-By: PHP/5.3.2
traceid: 141440110105425612908963065955238395687
Content-Encoding: gzip
头里面没有Content-Length ;
只能一直read ;
read到-1出现
所以等了好久才结束 ;
输出数据看了一下 ;
其实很早就把数据读完了 ;
但是read一直阻塞直到-1 ;
这个时间要很长 ;
对于这样的问题要怎么解决? ;
浏览器能够很好地读 , 但是我写的怎么就不行了呢