On 02 Oct 2013, at 05:29, [email protected] wrote:

> Sven Van Caekenberghe wrote:
>> Hi Ben,
>> 
>> On 01 Oct 2013, at 19:48, Ben Coman 
>> <[email protected]>
>>  wrote:
>> 
>>   
>> 
>>> For PharoLauncher, I am trying to get a progress bar going for the 
>>> downloading the Template lists, but the total transfer size is not being 
>>> filled in for the HTTPProgress announcement.  I've pulled out some code to 
>>> Workspace script into [2] with the resulting Transcript result shown in 
>>> [3].  I'm guessing this is due to the _"Transfer-Encoding: chunked"_ header 
>>> clashing with the "Content-Length" header [1].  By putting a 'self halt' in 
>>> ZnStatusLine>>readFrom: and executing several "Transcript crShow: 
>>> (ZnLineReader on: stream) nextLine" the real headers were found as shown in 
>>> [4], from which it seems the Content-Length is faked-up after the download 
>>> finishes, and no use for a progress bar.
>>>     
>>> 
>> 
>> Completely correct! I am happy you made it this far and were able to 
>> understand the specs and code.
>> 
>>   
>> 
>>> So I only today discovered 'chunked' format, so I am curious... is there a 
>>> particular advantage to use chunked for directory listing at 
>>> "url=http://files.pharo.org/image/30/
>>> "  ?
>>> Could it be changed to instead set Content-Length instead?
>>> btw, This is only for the directory listing (which however takes 10 seconds 
>>> to get all). The zip files seem to set "Content-Length" when downloaded.
>>>     
>>> 
>> 
>> The whole idea of chunked transfer encoding is to make it easier for the 
>> server: it does not have to buffer and compute a total size upfront. BTW, 
>> there are other cases in HTTP where Content-Length is not set as well. It is 
>> just how it is. And yes that means silly progress indications.
>> 
>> Sven
>>   
>> 
> .
> Thanks for confirming that. 
> Referring to [5]&[6], do you think the client forcing a HTTP/1.0 connection 
> could help get proper progress bars? 
> ...and how would that look adapting my Workspace script [2] ?

This is an unusual request, I've never needed it, I guess you could do 
something like

| client |
client := ZnClient new.
client url: 'http://zn.stfx.eu/zn/small.html'.
client request requestLine version: 'HTTP/1.0'.
client get.
client

> Maybe a downside of forcing HTTP/1.0 would requiring the server to not be a 
> VirtualHost (??). Does anyone know how the configuration of the servers used 
> by Pharo Launcher relate to this?

But yes, you will break lots of stuff, and for what ?

I mean, is it so bad that one of the downloads has no real progress bar ? How 
long can an 80Kb download take ?

There should still be a dialog that says downloading with a moving byte count, 
the graphic should be an animated in definitive progress bar.

> -ben
> 
> [5] 
> http://webmasters.stackexchange.com/questions/38738/how-to-avoid-chunked-transfer-encoding
> [6] http://www.jargonsoft.com/support/knowledgebase.php?article=12
> 
>>   
>>> cheers -ben
>>> 
>>> 
>>> [1] 
>>> http://stackoverflow.com/questions/2419281/content-length-header-versus-chunked-encoding
>>> 
>>> 
>>> "[2]start------------------Workspace-script----------"
>>> workBlock :=
>>>   [ ZnClient new
>>>       signalProgress: true ;
>>>       url: '
>>> http://files.pharo.org/image/30/
>>> ' ;
>>>       enforceHttpSuccess: true ;
>>>       beOneShot ;
>>>       accept: 'text/html;charset=utf-8' ;
>>>       enforceAcceptContentType: true ;
>>>       logToTranscript ;
>>>       get
>>>   ].
>>> 
>>> UIManager default informUserDuring:
>>>   [    :bar|
>>>       [ workBlock value] on: HTTPProgress do:
>>>       [    : progress |
>>>           Transcript crShow:  '# ' , progress printString ,
>>>                               '  total=' , progress total asString ,
>>>                               '  amount=' , progress amount asString.
>>>           bar label: progress printString.               progress isEmpty 
>>> ifFalse: [ bar current: progress percentage ].
>>>           progress resume.
>>>       ].
>>>   ].
>>> "[2]end------------------Workspace-script----------"
>>> 
>>> 
>>> "[3]start--------------Transcript------"
>>> # HTTPProgress: Connecting to files.pharo.org  total=nil  amount=nil
>>> 2013-10-02 00:43:36 428852 I Wrote a ZnRequest(GET /image/30/)
>>> 2013-10-02 00:43:36 428852 D Sent headers
>>> Accept: text/html;charset=utf-8
>>> User-Agent: Zinc HTTP Components 1.0
>>> Connection: close
>>> Host: files.pharo.org
>>> # HTTPProgress: Writing request  total=nil  amount=nil
>>> # HTTPProgress: Reading response  total=nil  amount=nil
>>> ZnUtils>>signalProgress: 16384  total: nil
>>> # HTTPProgress: Tranferred 16.38k bytes ...  total=nil  amount=nil
>>> ZnUtils>>signalProgress: 32768  total: nil
>>> # HTTPProgress: Tranferred 32.77k bytes ...  total=nil  amount=nil
>>> ZnUtils>>signalProgress: 49152  total: nil
>>> # HTTPProgress: Tranferred 49.15k bytes ...  total=nil  amount=nil
>>> ZnUtils>>signalProgress: 65536  total: nil
>>> # HTTPProgress: Tranferred 65.54k bytes ...  total=nil  amount=nil
>>> ZnUtils>>signalProgress: 81920  total: nil
>>> # HTTPProgress: Tranferred 81.92k bytes ...  total=nil  amount=nil
>>> ZnUtils>>signalProgress: 85434  total: nil
>>> # HTTPProgress: Tranferred 85.43k bytes ...  total=nil  amount=nil
>>> 2013-10-02 00:43:38 428852 I Read a ZnResponse(200 OK 
>>> text/html;h5ai=0.22.1;charset=UTF-8 85444B)
>>> 2013-10-02 00:43:38 428852 D Received headers
>>> Date: Tue, 01 Oct 2013 16:43:34 GMT
>>> Transfer-Encoding: chunked
>>> Content-Length: 85444
>>> Vary: Accept-Encoding
>>> Server: Apache
>>> Connection: close
>>> Content-Type: text/html;h5ai=0.22.1;charset=UTF-8
>>> 2013-10-02 00:43:38 428852 T GET /image/30/ 200 85444B 1874ms
>>> "[3]end--------------Transcript------"
>>> 
>>> "[4]start----------ZnStatusLine>>readReal-Headers--------"
>>> HTTP/1.1 200 OK
>>> Date: Tue, 01 Oct 2013 17:23:55 GMT
>>> Server: Apache
>>> Vary: Accept-Encoding
>>> Connection: close
>>> Transfer-Encoding: chunked
>>> Content-Type: text/html;h5ai=0.22.1;charset=UTF-8
>>> "[4]end-----------Real-Headers--------"
>>> 
>>> 
>>>     
>>> 
>> 
>> 
>> 
>>   
>> 
> 


Reply via email to