HTTP 從網(wǎng)絡(luò)中的圖片講起

HTTP 每次學(xué)的時(shí)候都感覺有些痛苦,不是痛苦記不住,是感覺零零星星的,看著看著就不知道自己看的是啥了。其實(shí)都是只看到管中窺豹,沒有一個全局的思想,下面就通過一個簡單的顯示網(wǎng)絡(luò)上的圖片展開講一下 HTTP。給你打開一個 HTTP 的大門。

有關(guān)于 HTTP 的詳細(xì)使用文檔。可以在這里點(diǎn)擊查看,如果沒有 HTTP 基礎(chǔ)的朋友或是有些迷糊的同學(xué),建議先通過這個小例子,大概了解一下 HTTP,然后再去仔細(xì)的看每一個點(diǎn)。

通過網(wǎng)絡(luò)獲取一張圖片

圖片縮略圖

這是一張我的壁紙的縮略圖,它的網(wǎng)址為:http://wx1.sinaimg.cn/mw690/986bd8b7gy1fuvkez49nkj211s0lchdt.jpg

從 URL 出發(fā)

我們都知道,在瀏覽器地址欄中輸入這個網(wǎng)址然后回車會得到一張圖片,那么它是怎么顯示出來的呢?

首先,我們把 URL 進(jìn)行拆分一下,具體得到三個部分:

  1. http:

  2. wx1.sinaimg.cn

  3. /mw690/986bd8b7gy1fuvkez49nkj211s0lchdt.jpg

這三個部分,分別對應(yīng)的是我的壁紙的 URL 中的協(xié)議類型、服務(wù)器地址、具體路徑。具體什么意思呢?

簡單來說就是瀏覽器會向 wx1.sinaimg.cn 發(fā)送一個 Http 請求類型的請求,用于獲取 /mw690/986bd8b7gy1fuvkez49nkj211s0lchdt.jpg 這個路徑的文件。

說了簡單的,再來看看復(fù)雜版的。

GET /mw690/986bd8b7gy1fuvkez49nkj211s0lchdt.jpg HTTP/1.1
Host: wx1.sinaimg.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36

這個就是稍微復(fù)雜版的樣子,實(shí)際的內(nèi)容不止這些,我刪去了部分內(nèi)容。全部內(nèi)容就是一個網(wǎng)絡(luò)請求 Request 。這個 Request 就是瀏覽器通過在我們地址欄輸入的內(nèi)容以及它(瀏覽器)協(xié)助我們增加的部分內(nèi)容之后構(gòu)建出來的。如果是客戶端開發(fā)者,在與后臺開發(fā)人員確定了 URL 及具體的請求參數(shù)等信息后,是需要自己通過各種框架或是自己寫來構(gòu)建一個請求的。解釋一下,第一行GET /mw690/986bd8b7gy1fuvkez49nkj211s0lchdt.jpg HTTP/1.1為請求行,其中包括請求方法,請求資源的路徑,Http 版本,其他部分為請求頭也叫 Request HEAD。

請求行

請求行內(nèi)容較少,就三種類型,分別對應(yīng)請求方法,請求資源的路徑,Http 版本,先看請求資源。

請求資源就是你所請求的目標(biāo)服務(wù)器上的文件路徑,就這么簡單,再來看看 Http 版本,上面的請求行中表明了使用的是 Http 1.1 版本,也是目前使用較多的版本,Http 2.0 已經(jīng)出來了,但還未大規(guī)模應(yīng)用。

重點(diǎn)來了,請求方法,請求方法一共有 8 個,常用的只有那么幾個,如果想了解更多點(diǎn)擊這里

  1. GET:用于請求指定的頁面信息,不發(fā)送 body;

  2. POST:用于新增或修改服務(wù)器資源,內(nèi)容寫在 body 中。

  3. PUT:用于修改服務(wù)器資源,內(nèi)容放在 body 中。具有冪等性,即:一次和多次請求某一個資源服務(wù)器處理后的結(jié)果應(yīng)為同樣的。

  4. DELETE:用于刪除服務(wù)器資源,不發(fā)送 body。

  5. HEAD:和 GET 請求使用方法相同,但服務(wù)器返回的響應(yīng)報(bào)文中不包含 body。

講到這里,我們算是把請求發(fā)送到服務(wù)器了,緊接著服務(wù)器接收到請求該處理了。

HTTP/1.1 200 OK
Date: Sun, 02 Sep 2018 15:29:53 GMT
Content-Type: image/jpeg
Content-Length: 110989
Cache-Control: max-age=7776000

狀態(tài)行

上面就是服務(wù)器收到我們的請求后,給出的響應(yīng)結(jié)果(Response)。以上就是服務(wù)器響應(yīng)結(jié)果的一部分內(nèi)容。與請求類似,響應(yīng)也有一個叫做狀態(tài)行的東西,就是第一行HTTP/1.1 200 Ok,其中,HTTP/1.1表示的 HTTP 的版本,200 表示的響應(yīng)的狀態(tài)碼,Ok 為狀態(tài)碼對應(yīng)的狀態(tài)信息。不過 200 只是針對之前請求圖片的結(jié)果為 成功,還有其他的狀態(tài)碼。下面列出幾個,想了解更多點(diǎn)擊這里

  • 1××,臨時(shí)性消息。

    • 100:目前為止一起正常,客戶端可以繼續(xù)請求;

    • 101:同意客戶端發(fā)來的切換到 HTTP2.0 的請求;

  • 2××,成功。

    • 200: ok

    • 201: 成功創(chuàng)建

    • 202: 該請求已被接受處理,但處理尚未完成。

  • 3××,重定向

    • 301: 永久性移動;

    • 302: 暫時(shí)性移動;

    • 304: 內(nèi)容未修改;

  • 4××,客戶端錯誤。

    • 400: 錯誤的請求,服務(wù)器不會處理。

    • 401: 沒認(rèn)證或認(rèn)證失敗

    • 403: 服務(wù)器拒絕處理;

    • 404: 服務(wù)器找不到對應(yīng)的資源信息;

  • 5××,服務(wù)器錯誤。

    • 500: 服務(wù)器內(nèi)部錯誤;

    • 501: 服務(wù)器要么不識別請求方法,要么無法滿足請求。

這里的響應(yīng)結(jié)果,是有 Body 的,Body 就是文章開頭的那張圖片,就不展示了,沒有 Body 的響應(yīng)也是有的,上面也講了,就是當(dāng)請求方法為HEAD的時(shí)候是不會有響應(yīng) Body 的,只有響應(yīng)HEAD

小結(jié)

  • 客戶端做了哪些事

    1. 瀏覽器將輸入的圖片 URL 解析為請求行;

    2. 客戶端自定義構(gòu)建請求頭(HEAD);

    3. 組裝數(shù)據(jù)向目標(biāo)服務(wù)器發(fā)送請求;

  • 服務(wù)器端做了哪些事

    1. 根據(jù)服務(wù)器處理結(jié)果構(gòu)建響應(yīng)(Response)響應(yīng)頭;

    2. 根據(jù)響應(yīng)具體消息構(gòu)建響應(yīng)頭(HEAD);

    3. 組裝數(shù)據(jù)給客戶端響應(yīng)信息;

HEAD

仔細(xì)看,請求與響應(yīng)他們都離不開一個他們都共有的東西,就是頭部信息(HEAD)請求有請求頭部,響應(yīng)有響應(yīng)頭部,雖然內(nèi)部不一定相同,但他們都是對 Body 或者說具體的請求內(nèi)容的一種描述信息。怎么描述?比如,我的那張壁紙,在響應(yīng)信息里Content-Type: image/jpeg這個就表示,Body 內(nèi)容為圖片,Content-Length: 110989這個就表示為內(nèi)容長度為 110989 字節(jié),即為 109 k。HEAD 的信息存儲格式為 <key>: <Value> 的形式。下面就介紹一些常用的HEAD。

Content-Type

Content-Type: text/html; 
  • image/jpeg 表示為 Body 為圖片類型;

  • text/html 表示 Body 為 Html 文本類型;

  • x-www-form-urlencoded 表示 Body 純文本表單提交類型

  • multitype/form-data 表示非純文本(內(nèi)容包含文件或其他非字符串形式的內(nèi)容)表單提交類型。

  • application/json 表示 json 格式的二進(jìn)制類型

    • application 表示任意類型的二進(jìn)制數(shù)據(jù),json 則指定了具體的數(shù)據(jù)類型,類似的還有 application/pdf 表示 pdf 格式的二進(jìn)制類型;

Location

Location: https://www.google.com/

在遇到 3×× 的請求狀態(tài)碼(重定向)時(shí)會遇到這個,它表示的內(nèi)容為目標(biāo) URL。

Host

Host: wx1.sinaimg.cn

表示,目標(biāo)服務(wù)器主機(jī),常見的為 Host: wx1.sinaimg.cn 并且后面是可以加端口號的。

Transfer-Encoding

Transfer-Encoding: chunked

用于表示在網(wǎng)絡(luò)傳輸中具體用了什么樣的形式進(jìn)行分塊傳輸。與 Content-Length 不同時(shí)存在。如果它有幾種類型,常用的有 chunked gzip。其中 chunked 用于分段傳輸內(nèi)容,gzip 用于將數(shù)據(jù)壓縮后進(jìn)行傳輸。

Range

Range: bytes=0-5000

用于獲取指定部分內(nèi)容,如果使用上面的 HEAD 作為圖片請求的一部分 HEAD 的話,我可以單獨(dú)獲取 0 到 5000 位置的字節(jié)信息,下面這張圖就是加上這個 HEAD 之后的響應(yīng)結(jié)果。Range 可以用在斷電續(xù)傳、多線程下載。

Range 示例

Accept-Charset

Accept-Charset: utf-8

表示客戶端能接受的數(shù)據(jù)字符編碼格式。

總結(jié)

通過這一個簡單的獲取網(wǎng)絡(luò)上圖片的例子,相信你也了解了一部分關(guān)于 HTTP 的內(nèi)容,趁著這個勁頭再去詳細(xì)看一下開頭提到那個 HTTP 的詳細(xì)使用文檔吧。

下面這個圖,只是我自己畫的一個簡版的關(guān)于 HTTP 的思維導(dǎo)圖,你也可以試試。


HTTP總結(jié)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,777評論 18 139
  • 前端開發(fā)者丨h(huán)ttp請求 https:www.rokub.com 前言見解有限, 如有描述不當(dāng)之處, 請幫忙指出,...
    麋鹿_720a閱讀 10,953評論 11 31
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,552評論 1 45
  • 當(dāng) app 和服務(wù)器進(jìn)行通信的時(shí)候,大多數(shù)情況下,都是采用 HTTP 協(xié)議。HTTP 最初是為 web 瀏覽器而定...
    Flysss1219閱讀 1,292評論 0 4
  • 我知道 總有一天我會變成你 無論我們是否聯(lián)系 見或不見 這都不重要 只是你已經(jīng)在我的體內(nèi)留下烙印 我會循著它 從微...
    春下二蟲閱讀 173評論 0 0