我們在前面學到了http報文結構,是由header+body組成。不過我們前面學的知識都還只是停留在header部分,所以現在我們要開始研究body部分。這便引出了http的實體資料概念。
1. 資料型別和編碼
在 tcp/ip 協議棧裡,傳輸資料基本上都是「header+body」的格式。但 tcp、udp 因為是傳輸層的協議,它們不會關心 body 資料是什麼,只要把資料傳送到對方就算是完成了任務。
而 http 協議則不同,它是應用層的協議,資料到達之後工作只能說是完成了一半,還必須要告訴上層應用這是什麼資料才行,否則上層應用就會「不知所措」。
在從mime中拿到自己想要的資料型別之外,http報文傳輸還要講究節約節約頻寬,因此這就又涉及到了檔案壓縮的問題,為了不要讓瀏覽器繼續「猜」,還需要有乙個「encoding type」,告訴資料是用的什麼編碼格式,這樣對方才能正確解壓縮,還原出原始的資料。比起 mime type 來說,encoding type 就少了很多,常用的只有下面三種:
(1)gzip:gnu zip 壓縮格式,也是網際網路上最流行的壓縮格式;
(2)deflate:zlib(deflate)壓縮格式,流行程度僅次於 gzip;
(3)br:一種專門為 http 優化的新壓縮演算法(brotli)。
http 協議為此定義了兩個 accept 請求頭字段和兩個 content 實體頭欄位,用於客戶端和伺服器進行「內容協商」。也就是說,客戶端用 accept 頭告訴伺服器希望接收什麼樣的資料,而伺服器用 content 頭告訴客戶端實際傳送了什麼樣的資料。
2. 語言型別與編碼
所謂的「語言型別」就是人類使用的自然語言,例如英語、漢語、日語等,而這些自然語言可能還有下屬的地區性方言,所以在需要明確區分的時候也要使用「type-subtype」的形式,不過這裡的格式與資料型別不同,分隔符不是「/」,而是「-」。舉幾個例子:en 表示任意的英語,en-us 表示美式英語,en-gb 表示英式英語,而 zh-cn 就表示我們最常使用的漢語。
accept-language: zh-cn, zh, en3. 內容協商的質量值content-language: zh-cn
在 http 協議裡用 accept、accept-encoding、accept-language 等請求頭欄位進行內容協商的時候,還可以用一種特殊的「q」引數表示權重來設定優先順序,這裡的「q」是「quality factor」的意思。權重的最大值是 1,最小值是 0.01,預設值是 1,如果值是 0 就表示拒絕。具體的形式是在資料型別或語言**後面加乙個「;」,然後是「q=value」。q從大到小表示優先順序。
;q=0.8
4. 動手實驗
上面講完了理論部分,接下來就是實際動手操作了。可以用我們的實驗環境,在 www 目錄下有乙個 mime 目錄,裡面預先存放了幾個檔案,可以用 uri「/15-1?name=file」的形式訪問,例如:
這裡就給出了響應頭字段和請求頭欄位需求和結果。
5. 課後作業
(1)試著解釋一下這個請求頭「accept-encoding: gzip, deflate;q=1.0, *;q=0.5, br;q=0」,再模擬一下伺服器的響應頭。
答:請求頭希望收到檔案的壓縮格式是gzip、deflate,除了br之外的其他所有壓縮格式,只是如果當這些格式響應頭都可以返回的時候,響應頭優先響應gzip
和deflate兩種格式,其次是其他格式,其中br格式不支援。
伺服器響應頭模擬:
(2)假設你要使用 post 方法向伺服器提交一些 json 格式的資料,裡面包含有中文,請求頭應該是什麼樣子的呢?
答:請求頭:
accept-ranges:bytescontent-*欄位也可以用在請求報文裡,說明請求體的資料型別。在這裡不能用accept欄位,因為是post,所以要用content-language來指明body的語言型別,在content-type裡用charset指明編碼型別。content-language:zh-cn
至此,結束。
燈謎 乙個海納百川的文字遊戲
16340137 資料科學與計算機學院 燈謎結構和內容 燈謎與化學 燈謎與數學 作為中國優秀的傳統文化,燈謎影響著許多人。它以濃厚的學術性和趣味性深深地吸引著人們,讓不少人為之痴迷。燈謎涉及的領域非常廣泛 官方語調到此結束 以下進入正題。分幾個方面說明 一道完整的燈謎由謎號 謎面 謎目 謎底四部分組...
程式設計師是這樣煉成的(5) 海納百川
做程式設計師要 海納百川 其實就是建議各位要做乙個通才。當然做通才是有條件的,我總結了下前提有三 1.你已經是乙個專才。熟練操作學一門像樣的程式語言。2.有穩定的工作和收入支援。3.想得更多的挑戰和機會。她的作者就是乙個曠世通才 說了這麼多的苦口婆心勸大家做乙個海納百川的通才,大家肯定會問,我覺得我...
做乙個海納百川的方外之人 我的極樂世界觀
1.一心專心讀書。這是人生的主題,全神貫注做一名專項研究者。學問大家,科學家,發明家。好好的生存。永生之路 活在精神之上。以得到知識為樂,以會運用為樂,以創新技術為極樂,以解決問題為極樂。2.不受別人情緒影響。別人要什麼給什麼。不拒絕別人的好意。自己無情緒。忘我。3.不左右別人的思想。不批評別人,只...