在程式中由於如果是一般的情況下,那麼客戶端傳送過請求訊息之後,伺服器端返回的資訊頭中應該包括乙個字段叫做「
content-length
」 ,這個字段,在這個字段之後緊接著就是將要返回給客戶端的檔案的大小,我們只要將這個值捕獲,從伺服器端接收相應大小的檔案就可以了。但是
有時候,
web伺服器生成
是無法在
header
就確定訊息大小的,這時一般來說伺服器將不會提供
content-length
的頭資訊,而採用
chunked
編碼動態的提供
body
內容的長度
。 所以在程式中就無法獲得檔案的大小,
chunked
編碼的檔案的格式是:
採用若干個塊連線在一起,最後乙個塊的大小為
0 來決定塊的結束,也就是檔案的結束。具體的格式是 :
(資訊頭)
/r/n
165 [
塊大小,十六進製制表示
] /r/n
(塊的具體內容)
/r/n 0 [
塊的大小為
0,表示塊的結束
]/r/n
在程式中,將獲得的資訊頭進行分析,從以前的方式中如果獲得的檔案的大小為
0 的情況下,那麼就可以採用了塊的傳遞方式,再進一步判斷,如果在資訊頭中包含有
transfer-encoding
這個字段的話,就是採用了塊傳遞的方式。這時就從資訊頭後面乙個乙個字元的從伺服器端獲得返回字元。以
』/r』』/n』
作為迴圈的結束。把這個字串儲存在乙個動態陣列中。這個陣列中儲存的就是十六進製制的檔案的大小,將字串轉化成整數,返回給原來程式中用來儲存檔案大小的變數,利用
receive
就可以從伺服器端獲得制定大小的檔案了.
node學習中HTTP知識的補充
現在很多同學在面試的前端的過程中肯定遇到很多面試官問http方面的問題,在我接觸的很多前端朋友在這方面都比較偏弱,在學習nodejs過程中難免要接觸這些東西。總體上分三大部 1 http客戶端傳送請求,建立埠。2 http伺服器在埠監聽客戶端請求 3 http伺服器向客戶端返回狀態碼和內容 我記得我...
觀察者模式中,訊息採用推和拉方式來傳遞的比較
觀察者模式,指的是定義一種物件間的一對多的關係,當乙個物件的狀態發生變化的時候,所有依賴於它的物件都將得到通知並更新自己。現在要說的分歧在這裡 推 的方式是指,subject維護乙份觀察者的列表,每當有更新發生,subject會把更新訊息主動推送到各個observer去。拉 的方式是指,各個obse...
觀察者模式中,訊息採用推和拉方式來傳遞的比較
觀察者模式,指的是定義一種物件間的一對多的關係,當乙個物件的狀態發生變化的時候,所有依賴於它的物件都將得到通知並更新自己。現在要說的分歧在這裡 推 的方式是指,subject維護乙份觀察者的列表,每當有更新發生,subject會把更新訊息主動推送到各個observer去。拉 的方式是指,各個obse...