進階篇1講15海納百川http實體數(shù)據(jù)_第1頁
進階篇1講15海納百川http實體數(shù)據(jù)_第2頁
進階篇1講15海納百川http實體數(shù)據(jù)_第3頁
進階篇1講15海納百川http實體數(shù)據(jù)_第4頁
進階篇1講15海納百川http實體數(shù)據(jù)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

11:53 下載 15|海納百川:HTTP2019-07-01透視HTTP協(xié) 進入課程你好,我是Chrono今天我要與你分享的話題是“海納百川:HTTP的實體數(shù)8講的篇幅來詳細解析HTTP協(xié)議里的各種頭字段,包括定就可以完全掌握HTTP協(xié)議。在前面的“基礎(chǔ)篇”里我們了解了HTTP報文的結(jié)構(gòu),知道一個HTTP報文是由“header+body”組成的。但那時我們主要研究的是header,沒有涉及到body。所以,“進階篇”的第一講就從HTTP的body談起。在TCP/IP是“header+body”的格式。但TCP、UDP因為是傳輸層的協(xié)議,它們不會關(guān)心body數(shù)據(jù)是什么,只要把數(shù)據(jù)發(fā)送而HTTP協(xié)議則不同,它是應(yīng)用層的協(xié)議,數(shù)據(jù)到達之后工你可以設(shè)想一下,假如HTTP沒有告知數(shù)據(jù)類型的功能,服以通過檢查數(shù)據(jù)的前幾個字節(jié)也許就能知道這是個GIF圖片、或者是個MP3音樂文件,但這種方式無疑十分低效,幸運的是,早在HTTP協(xié)議誕生之前就已經(jīng)有了針對這種問件可以發(fā)送ASCII碼以外的任意數(shù)據(jù),方案的名字叫做“多用途互聯(lián)網(wǎng)郵件擴展”(MultipurposeInternetMailExtensions),簡稱為MIME。MIME是一個很大的標(biāo)準(zhǔn)規(guī)范,但HTTP只“順手牽羊”取了其中的一部分,用來標(biāo)記body的數(shù)據(jù)類型,這就是我們平常總能聽到的“MIMEtype”。MIME把數(shù)據(jù)分成了八大類,每個大類下再細分出多個子類,形式是“type/subtype”的字符串,巧得很,剛好也符合了HTTP明文的特點,所以能夠很容易地納入HTTP字段里。這里簡單列舉一下在HTTP里經(jīng)常遇到的幾個類別:text/html了,表示超文本文檔,此外還有純文本text/plain、樣式表text/css等。image:即圖像文件,有image/gif、image/jpeg、image/png等。audio/video:音頻和視頻數(shù)據(jù),例如audio/mpeg、video/mp4等。application:數(shù)據(jù)格式不固定,可能是文本也可能是二進制,必須由上層應(yīng)用程序來解釋。常見的有application/json,application/javascript、application/pdf么類型,像剛才說的“黑盒”,就會是application/octet-stream,即不透明的二進制數(shù)據(jù)。但僅有MIMEtype還不夠,因為HTTP在傳輸時為了節(jié)約續(xù)“猜”,還需要有一個“Encodingtype”,告訴數(shù)據(jù)是比起MIMEtype來說,Encodingtype就少了很多,常用gzip:GNUzip壓縮格式,也是互聯(lián)網(wǎng)上最流行的壓縮br:一種專門為HTTP優(yōu)化的新壓縮算法(Brotli)有了MIMEtype和Encodingtype,無論是瀏覽器還是服務(wù)器就都可以輕松識別出body的類型,也就能夠正確處理HTTP協(xié)議為此定義了兩個Accept請求頭字段和兩個Content內(nèi)容協(xié)商”。也就是說,客戶端用Accept什么樣的數(shù)據(jù),而服務(wù)器用Content頭告訴客戶端實際發(fā)送了什么樣的數(shù)據(jù)。Accept字段標(biāo)記的是客戶端可理解的MIMEtype,可以1Accept:這就是告訴服務(wù)器:“我能夠看懂HTML、XML的文本,還有webp和png1Content-Type:2Content-Type:HTML文件,會調(diào)用排版引擎渲染出頁面,看到“image/png”就知道是一個PNG文件,就會在頁面上Accept-Encodin字段標(biāo)記的是客戶端支持的壓縮格式,例如上面說的gzip、deflate個,服務(wù)器可以選擇其中一種來壓縮數(shù)據(jù),實際使用的壓縮格式放在響應(yīng)頭字段Content-Encodin里。1Accept-Encoding:gzip,deflate,2Content-Encoding:Accept-Encoding字段,就表示客戶端不支持壓縮數(shù)據(jù);如果響應(yīng)報文里沒有Content-Encoding字段,就表示響MIMEtype和Encodingtype解決了計算機理解body數(shù)了很多不同的語言,雖然都是text/html,但如何讓瀏覽器這實際上就是“國際化”的問題。HTTP采用了與數(shù)據(jù)類型舉幾個例子:en表示任意的英語,en-US表示美式英語,en-GB表示英式英語,而zh-CN就表示我們最常使用的漢用的ASCII、漢語世界用的GBK、BIG5,日語世界用的Shift_JIS等。同樣的一段文字,用一種編碼顯示正常,換另所以后來就出現(xiàn)了Unicode和UTF-8,把世界上所有的語言都容納在一種編碼方案里,UTF-8也成為了互聯(lián)網(wǎng)上的標(biāo)同樣的,HTTP協(xié)議也使用Accept請求頭字段和Content1Accept-Language:zh-CN,zh,這個請求頭會告訴服務(wù)器:“最好給我zh-CN字,如果沒有就用其他的漢語方言,如果還沒有就給英文”。Language1Content-Language:zh-字符集在HTTP里使用的請求頭字段是但響應(yīng)頭里卻沒有對應(yīng)的Content-Charset,而是在Content-Type字段的數(shù)據(jù)類型后面用“charset=xxx”來表示,這點需要特別注意。例如,瀏覽器請求GBK或UTF-8的字符集,然后服務(wù)器返回的是UTF-8編碼,就是下面這樣:1Accept-Charset:gbk,utf-2Content-Type:text/html;charset=utf-不過現(xiàn)在的瀏覽器都支持多種字符集,通常不會發(fā)送Accept-Charset,而服務(wù)器也不會發(fā)送Content-Language,因為使用的語言完全可以由字符集推斷出來,所以在請求頭里一般只會有Accept-Language頭里只會有Content-Type字段。在HTTP協(xié)議里用Accept、Accept-Encoding、Accept-Language等請求頭字段進行內(nèi)容協(xié)商的時候,還可以用一的“q”是“qualityfactor”權(quán)重的最大值是1,最小值是0.01,默認值是1,如果值是0就表示拒絕。具體的形式是在數(shù)據(jù)類型或語言代碼后面加斷句語氣要強于“,”,而在HTTP的內(nèi)容協(xié)商里卻恰好反例如下面的Accept字段:1Accept:它表示瀏覽器最希望使用的是HTML文件,權(quán)重是1,其次是XML文件,權(quán)重是0.9,最后是任意數(shù)據(jù)類型,權(quán)重是0.8。服務(wù)器收到請求頭后,就會計算權(quán)重,再根據(jù)自己的實際情況優(yōu)先輸出HTML或者XML。內(nèi)容協(xié)商的過程是不透明的,每個Web服務(wù)器使用的算法都不一樣。但有的時候,服務(wù)器會在響應(yīng)頭里多加一個字段,記錄服務(wù)器在內(nèi)容協(xié)商時參考的請求頭字段,給出一點信息,例如:Vary:Accept-Encoding,User-這個Vary字段表示服務(wù)器依據(jù)了Accept-Encoding、User-Agent和Accept這三個頭字段,然后決定了發(fā)回的Vary記”。每當(dāng)Accept等請求頭變化時,Vary也會隨著響應(yīng)報文一起變化。也就是說,同一個URI可能會有多個不同服務(wù),這個之后講“HTTP緩存”時還會再提到。上面講完了理論部分,接下來就是實際動手操作了。可以用我們的實驗環(huán)境,在www目錄下有一個mime預(yù)先存放了幾個文件,可以用URI“/15-1?name=file”的形式訪問,例如:/15-/15-在Chrome里打開開發(fā)者工具,就能夠看到Accept和Content頭:你也可以把任意的文件拷貝到mime目錄下,比如壓縮包、MP3、圖片、視頻等,再用Chrome訪問,觀察更多的MIMEtype。戶網(wǎng)站,看看真實網(wǎng)絡(luò)世界里的HTTP報文是什么樣子的。今天我們學(xué)習(xí)了HTTP里的數(shù)據(jù)類型和語言類型,在這里為數(shù)據(jù)類型表示實體數(shù)據(jù)的內(nèi)容是什么,使用的是MIMEtype,相關(guān)的頭字段是Accept和Content-Type;Accept-Encoding和Content-Encoding;Accept-Language和Content-Language;Accept-Charset和Content-Type;客戶端需要在請求頭里使用Accept等頭字段與服務(wù)器進Accept等頭字段可以用“,”順序列出多個可能的選項,試著解釋一下這個請求頭“Accept-Encoding:gzip,deflate;q=1.0,*;q=0.5,br;q=0”,再模擬一下服務(wù)器假設(shè)你要使用POST方法向服務(wù)器提交一些JSON格式試著用快遞發(fā)貨收貨比喻一下MIME、Encoding等概?版權(quán)歸極客邦科技所有,未經(jīng)許可不得傳播售賣。頁面已增加防盜追蹤,上一 14|HTTP有哪些優(yōu)點?又有哪些缺點下一 16|把大象裝進冰箱:HTTP傳輸大文件的方寫留寫留2019-07-展開52019-07-展開作者回復(fù):thanks52019-07-現(xiàn)在很多小文件比如圖片都往云存上放了千萬指定正確content-type22019-07-HTTP/1.1200展開22019-07-q展開12019-07-12019-07-作者回復(fù):每建立一個連接就需要tcp握手,對同一個ip+端口,瀏覽器通常最多建立62019-07-Content-type:application/json;charset=utf-Accept-language:zh-CN老師,我在mime中放了1G的MP4展開content-language,post時應(yīng)該用2019-07-accept而你發(fā)送post請求時,你發(fā)送的數(shù)據(jù)是給服務(wù)器的,這content-type據(jù)類型一樣,你也需要用content-來表明你給別人的數(shù)2019-07-03POST/account/userHTTP/1.1Host:展開作者回復(fù):發(fā)post請求,服務(wù)器也會有響應(yīng)報文,所以就需要用accept2019-07-展開2019-07-2019-07-Accept-展開作者回復(fù):132019-07-content-type展開2019-07-展開2019-07-“所以后來就出現(xiàn)了Unicode和UTF-8,把世界上所有的語言都容納在一種編碼方案里,UTF-8這句話最后有點問題吧?Unicode展開utf-8只是編碼方案,2019-07-content-type:application/json;charset=gbk如果有作者回復(fù):對,不過最好還是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論