資料型別與編碼
在tcp/ip協議棧裡,傳輸資料基本上都是"header+body"的格式,但是tcp,udp因為是傳輸層的協議,它們並不關心body資料是什麼,只要把資料送到對方就可以了。
而http協議則不同,它是應用層的協議,資料到達之後工作只能說是完成了一半,還必須要告訴上層應用這是什麼資料才行,否則上層應用就會不知所措。
那麼這裡簡單列舉一下在http裡經常遇到的幾個類別:
1.text:即文字格式的可讀資料,我們最熟悉的應該就是text/html了,表示超文字文件,此外還有純文字text/plain,樣式表text/css等。
2.image:即影象檔案,有image/gif,image/jpeg,image/png等。
但僅有上面這些mime type還不夠,因為http在傳輸時為了節約頻寬,有時候還會壓縮資料,還需要有乙個"encoding type",告訴資料是用的什麼編碼格式,這樣對方才能正確解壓縮,還原出原始資料。
通常encoding type有下面三種型別:
1.gzip:gnu zip壓縮格式,也是網際網路上最流行的壓縮格式
2.deflate:zlib(deflate)壓縮格式,流行程度僅次於gzip
3.br:一種專門為http優化的新壓縮演算法(brotli)
資料型別使用的頭字段
有了上面兩種型別,無論是瀏覽器還是伺服器就都可以輕鬆識別出body的型別,也就能正確處理資料了。
http協議為此定義了兩個accept請求頭子段和兩個content實體頭欄位,用於客戶端和伺服器進行內容協商。也就是說,客戶端用accept頭告訴伺服器希望接收什麼樣的資料,而伺服器用content頭告訴客戶端實際傳送了什麼樣的資料。
accept欄位標記的是客戶端可理解的mime type,可用「,」做分隔符列出多個型別,讓伺服器有更多的選擇餘地,例如下面的這個頭:
相應的,伺服器會在響應報文裡用頭子段content-type告訴實體資料的真實型別:
content-type: text/htmlcontent-type: image/png
這樣瀏覽器看到報文裡的型別是"text/html"就知道是html檔案,會呼叫排版引擎渲染出頁面,看到image/png就知道是乙個png檔案,就會在頁面上顯示出影象。
accept-encoding欄位標記的是客戶端支援的壓縮格式,例如上面說的gzip,deflate等,同樣也可以用
Buffered流 二進位制
bufferedreader類是reader類的子類 bufferedreader類帶有緩衝區按行讀取內容的readline 方法 reader類常用方法 int read int read byte c read char c,int off,int len void close 子類buffer...
php讀取二進位制 php讀取二進位製流
將php資料轉換為二進位制資料 string pack string format mixed args mixed 將二進位制資料轉換為php資料 array unpack string format,string data format a nul padded string a nul 字串填...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...