網(wǎng)絡(luò)請(qǐng)求基礎(chǔ)知識(shí)(一)HTTP 基礎(chǔ)篇

1.報(bào)文格式

1.1 請(qǐng)求報(bào)文

以下是發(fā)起一個(gè) HTTP 請(qǐng)求需要的主要信息,在發(fā)起網(wǎng)絡(luò)請(qǐng)求時(shí)我們一般只提供 URL 和請(qǐng)求實(shí)體拒垃,剩下的交給框架(Okhttp3或者 Retrofit等)完成。

  • 請(qǐng)求行:請(qǐng)求方法+路徑+版本號(hào)

  • 請(qǐng)求頭:

    • Host: 請(qǐng)求的主機(jī)名

    • Connection:是否保持連接

    • User-Agent:用戶信息

    • Accept:客戶端接受的數(shù)據(jù)類型

    • Accept-Encoding:客戶端識(shí)別的數(shù)據(jù)編碼格式

    • Cookie:cookie 信息

  • 請(qǐng)求體:內(nèi)容

Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 7.0; m3 note) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
ip=172.56.168.66&imei=86521684611</pre>
1.2 響應(yīng)報(bào)文

準(zhǔn)備好http 請(qǐng)求信息后乒省,接下來(lái)就可以發(fā)起網(wǎng)絡(luò)請(qǐng)求了榨惠,請(qǐng)求一般使用socket 闷祥,具體實(shí)現(xiàn)可以通過(guò) TCP/UDP 來(lái)傳輸。

  • 狀態(tài)行:版本號(hào)+狀態(tài)碼+狀態(tài)信息

  • 響應(yīng)頭:Content-Type构挤,Content-Length等

  • 響應(yīng)體:返回內(nèi)容

Server: nginx/1.8.1
Date: Thu, 03 Jan 2019 07:31:02 GMT
Content-Type: text/plain;charset=UTF-8
Content-Length: 93
Connection: keep-alive
Accept-Charset: big5, big5-hkscs, euc-jp, euc-kr, gb18030, gb2312, gbk, ibm-thai, ibm00858, ibm01140, ibm01141
?
{"adlist":{"kaiping":{"ad":{}},"yunying":{"ad":{}}},"showadtime":"10","getadlisttime":"1200"}</pre>
1.2.1 狀態(tài)嗎
2xx:成功,報(bào)文已成功收到并被正確處理
3xx:重定向髓介,資源位置發(fā)生變動(dòng),需要客戶端重新發(fā)送請(qǐng)求
4xx:客戶端錯(cuò)誤筋现,請(qǐng)求報(bào)文有誤唐础,服務(wù)器無(wú)法處理
5xx:服務(wù)器錯(cuò)誤箱歧,服務(wù)器在處理請(qǐng)求時(shí)內(nèi)部發(fā)生了錯(cuò)誤</pre>```
  • 200 請(qǐng)求成功

  • 304 緩存可以繼續(xù)用

  • 404 地址有問(wèn)題

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

  • 301:請(qǐng)求的資源永久遷移到新的位置

  • 302:請(qǐng)求的資源暫時(shí)需要從另一個(gè)地址響應(yīng),后續(xù)的請(qǐng)求中應(yīng)該繼續(xù)使用原地址

  • 305:使用代理一膨,請(qǐng)求的資源需要通過(guò)指定的代理訪問(wèn)

  • 307:請(qǐng)求資源臨時(shí)需要從新地址響應(yīng)(與 302 不同的是它是 HTTP1.1 出現(xiàn)的呀邢;此外,如果重定向 307 的原請(qǐng)求不是 GET 或者 HEAD 方法豹绪,瀏覽器一定不能自動(dòng)的進(jìn)行重定向)

  • 400:客戶端請(qǐng)求語(yǔ)法錯(cuò)誤

  • 403:禁止訪問(wèn)价淌,服務(wù)器理解請(qǐng)求,但由于沒(méi)有授權(quán)服務(wù)器拒絕提供資源

  • 404:找不到瞒津,請(qǐng)求的位置無(wú)法找到任何資源

  • 406:無(wú)法訪問(wèn)蝉衣,請(qǐng)求資源的類型和想要的不一樣

1.2.2 響應(yīng)頭
  • Cache-Control:緩存策略,private(中間節(jié)點(diǎn)不能緩存數(shù)據(jù)巷蚪,個(gè)性信息)/public(中間節(jié)點(diǎn)能緩存數(shù)據(jù)病毡,公有信息)

  • Pramga:用于在舊版本兼容Cache-Control`

  • Connection:連接是否要保持,在 HTTP1.1 開(kāi)始允許保持連接

  • Cotent-Encoding:服務(wù)器使用了什么壓縮方法屁柏,客戶端需要進(jìn)行相應(yīng)的處理

  • Content-Type:返回的數(shù)據(jù)類型

  • Content-Length:服務(wù)器告知相應(yīng)對(duì)象的長(zhǎng)度

  • Content-Range:服務(wù)器告知該想要屬于哪個(gè)部分啦膜,一般用于斷點(diǎn)續(xù)傳

  • Range:客戶端告知服務(wù)器自己想取對(duì)象的哪部分,一般用于斷點(diǎn)續(xù)傳

  • Set-Cookie:服務(wù)端告知當(dāng)前 Cookie 的使用限制淌喻,包括:過(guò)期日期僧家、路徑、域似嗤、端口啸臀、版本等

  • ETag:對(duì)當(dāng)前相應(yīng)的一個(gè)標(biāo)識(shí),用于判斷請(qǐng)求資源是否修改

  • Expired:服務(wù)器表明該相應(yīng)將在什么時(shí)候過(guò)期(過(guò)期了的對(duì)象烁落,只有在跟服務(wù)器驗(yàn)證其有效性后乘粒,才能用來(lái)響應(yīng)客戶請(qǐng)求)

  • Location:指定重定向的url地址,請(qǐng)求http://www.baidu.com重定向到https://www.baidu.com

   Location: https://www.baidu.com/
   Non-Authoritative-Reason: HSTS</pre>
  • Proxy-Authenticate: 代理服務(wù)器處理的請(qǐng)求伤塌,要求客戶端提供代理身份驗(yàn)證信息

  • Referer:客戶端告知服務(wù)器自己是從哪個(gè) URL 點(diǎn)擊當(dāng)前請(qǐng)求中的 URL

  • Transfer-Encoding:服務(wù)器表明自己對(duì)本響應(yīng)體作了怎樣的編碼灯萍,比如是否分塊(chunked)

  • Last-Modified:服務(wù)器返回一個(gè)過(guò)期時(shí)間

  • User-Agent:用戶代理,實(shí)際發(fā)送請(qǐng)求每聪,接受響應(yīng)的瀏覽器和手機(jī)旦棉。(返回手機(jī)頁(yè)面還是pc頁(yè)面)

  • Cache-Control:no-cache(下次使用時(shí),詢問(wèn)一下),no-store(不要緩存),max-age(未過(guò)期直接使用)

1.2.3 使用緩存過(guò)程如下圖:
image

2.HTTP 的特點(diǎn):

  • 靈活可擴(kuò)展

    • HTTP 協(xié)議是一個(gè)“靈活可擴(kuò)展”的傳輸協(xié)議

      • 只規(guī)定了報(bào)文的基本格式,各個(gè)組成部分并沒(méi)有嚴(yán)格的語(yǔ)法語(yǔ)義限制,開(kāi)發(fā)者可自由定制

      • 能夠傳輸圖片,音頻,視頻等任意數(shù)據(jù)

  • 可靠傳輸

    • HTTP 協(xié)議是一個(gè)“可靠”的傳輸協(xié)議

      • 基于 TCP/IP 的药薯,而 TCP 本身是一個(gè)“可靠”的傳輸協(xié)議

      • HTTP 并不能 100% 保證數(shù)據(jù)一定能夠發(fā)送到另一端绑洛,在網(wǎng)絡(luò)繁忙、連接質(zhì)量差等惡劣的環(huán)境下童本,也有可能收發(fā)失敗.

  • 應(yīng)用層協(xié)議

    • HTTP 協(xié)議是一個(gè)應(yīng)用層的協(xié)議

      • 對(duì)比其他應(yīng)用層協(xié)議,HTTP 協(xié)議稱得上是一個(gè)萬(wàn)能的協(xié)議,只要性能不太苛刻,幾乎可以傳輸一切東西
  • 請(qǐng)求 - 應(yīng)答

    • HTTP 協(xié)議使用的是請(qǐng)求 - 應(yīng)答通信模式
  • 無(wú)狀態(tài)

    • HTTP 協(xié)議是無(wú)狀態(tài)的

      • TCP 協(xié)議:有狀態(tài),一開(kāi)始處于 CLOSED 狀態(tài)真屯,連接成功后是ESTABLISHED 狀態(tài),斷開(kāi)連接后是 FIN-WAIT 狀態(tài)穷娱,最后又是 CLOSED 狀態(tài)绑蔫。

      • HTTP 協(xié)議:客戶端和服務(wù)器永遠(yuǎn)是處在一種“無(wú)知”的狀態(tài),建立連接前兩者互不知情运沦,每次收發(fā)的報(bào)文也都是互相獨(dú)立的,沒(méi)有任何的聯(lián)系。收發(fā)報(bào)文也不會(huì)對(duì)客戶端或服務(wù)器產(chǎn)生任何影響,連接后也不會(huì)要求保存任何信息配深。

      • UDP 協(xié)議:它是無(wú)連接也無(wú)狀態(tài)的携添,順序發(fā)包亂序收包,數(shù)據(jù)包發(fā)出去后就不管了,收到后也不會(huì)順序整理篓叶。而 HTTP 是有連接無(wú)狀態(tài)烈掠,順序發(fā)包順序收包,按照收發(fā)的順序管理報(bào)文.

3. HTTP 的優(yōu)點(diǎn)和缺點(diǎn)

3.1 優(yōu)點(diǎn)
  • 1.簡(jiǎn)單澜共、靈活向叉、易于擴(kuò)展

  • 2.應(yīng)用廣泛、環(huán)境成熟

3.2 雙刃劍
  • 無(wú)狀態(tài)

    • 優(yōu)點(diǎn):

      • 節(jié)省資源,實(shí)現(xiàn)簡(jiǎn)單

      • 容易組成集群(服務(wù)器都是相同的,無(wú)狀態(tài)差異)

    • 缺點(diǎn):無(wú)法支持需要多個(gè)步驟的"事務(wù)操作",如電商購(gòu)物,用戶首先需要登陸,然后添加購(gòu)物車,再下單,結(jié)算,支付,而這一系列過(guò)程都需要知道用戶的身份信息才可以,又因?yàn)?http 的無(wú)狀態(tài),每一次都需要問(wèn)一遍身份信息,不僅麻煩,還浪費(fèi)資源.

  • 明文

    協(xié)議里的報(bào)文(準(zhǔn)確地說(shuō)是 header 部分)不使用二進(jìn)制數(shù)據(jù)嗦董,而是用簡(jiǎn)單可閱讀的文本形式母谎。

    • 優(yōu)點(diǎn):不需要借助任何外部工具,容易查看或修改,方便調(diào)試

    • 缺點(diǎn):報(bào)文所有信息都暴露在傳輸鏈路里

3.3 缺點(diǎn):
  • 不安全

    安全有很多的方面,明文只是“機(jī)密”方面的一個(gè)缺點(diǎn)京革,在“身份認(rèn)證”和“完整性校驗(yàn)”這兩方面 HTTP 也是欠缺的奇唤。

    • 身份認(rèn)證:HTTP 無(wú)法提供有效的手段來(lái)確認(rèn)通信雙方的真實(shí)身份,很可能會(huì)連到一個(gè)一模一樣的假冒 站

    • 不支持完整性校驗(yàn),數(shù)據(jù)在傳輸過(guò)程中容易被篡改而無(wú)法辨別真?zhèn)?

  • 雖然銀行可以用 MD5、SHA1 等算法給報(bào)文加上數(shù)字摘要匹摇,但還是因?yàn)椤懊魑摹边@個(gè)致命缺點(diǎn)咬扇,黑客可以連同摘要一同修改,最終還是判斷不出報(bào)文是否被竄改

如何解決:HTTPS

  • 性能

概括:不算好,不夠好

  • 基于 TCP ,TCP的性能是不差的,但現(xiàn)在的互聯(lián)網(wǎng)特點(diǎn)是移動(dòng)和高并發(fā),不能保證穩(wěn)定的連接質(zhì)量,所以在 TCP 層面上 HTTP 協(xié)議有時(shí)候就會(huì)表現(xiàn)的不夠好

  • 請(qǐng)求 - 應(yīng)答”模式則加劇了 HTTP 的性能問(wèn)題,即隊(duì)頭阻塞”(Head-of-line blocking),當(dāng)順序發(fā)送的請(qǐng)求序列中的一個(gè)請(qǐng)求因?yàn)槟撤N原因被阻塞時(shí),在后面排隊(duì)的所有請(qǐng)求也一并被阻塞廊勃,會(huì)導(dǎo)致客戶端遲遲收不到數(shù)據(jù)

如何解決:Web 性能優(yōu)化,緩存等

終極解決方案:HTTP/2 和 HTTP/3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懈贺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坡垫,更是在濱河造成了極大的恐慌梭灿,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冰悠,死亡現(xiàn)場(chǎng)離奇詭異堡妒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)溉卓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)皮迟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人桑寨,你說(shuō)我怎么就攤上這事伏尼。” “怎么了尉尾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵烦粒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)扰她,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任芭碍,我火速辦了婚禮徒役,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窖壕。我一直安慰自己忧勿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布瞻讽。 她就那樣靜靜地躺著鸳吸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪速勇。 梳的紋絲不亂的頭發(fā)上晌砾,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音烦磁,去河邊找鬼养匈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛都伪,可吹牛的內(nèi)容都是我干的呕乎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼陨晶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼猬仁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起先誉,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤湿刽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后谆膳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體叭爱,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年漱病,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了买雾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杨帽,死狀恐怖漓穿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情注盈,我是刑警寧澤晃危,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響僚饭,放射性物質(zhì)發(fā)生泄漏震叮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一鳍鸵、第九天 我趴在偏房一處隱蔽的房頂上張望苇瓣。 院中可真熱鬧,春花似錦偿乖、人聲如沸击罪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)媳禁。三九已至,卻和暖如春画切,著一層夾襖步出監(jiān)牢的瞬間竣稽,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工槽唾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丧枪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓庞萍,卻偏偏與公主長(zhǎng)得像拧烦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钝计,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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