超文本傳輸協(xié)議(HTTP)

1. 簡(jiǎn)介

HTTP是位于應(yīng)用層的一個(gè)無(wú)狀態(tài)的協(xié)議冰木,默認(rèn)HTTP的端口號(hào)為80柬甥,HTTPS的端口號(hào)為443灶轰。HTTP協(xié)議本身是不可靠的實(shí)現(xiàn)洲守,要實(shí)現(xiàn)可靠地?cái)?shù)據(jù)傳輸需要依靠底層的TCP協(xié)議疑务。

2. 實(shí)現(xiàn)

HTTP的報(bào)文包括請(qǐng)求報(bào)文響應(yīng)報(bào)文兩種

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

請(qǐng)求報(bào)文是瀏覽器向服務(wù)器發(fā)出請(qǐng)求的報(bào)文,由第一行的請(qǐng)求行和后面的首部行組成梗醇,每一行都由回車換行(\r\n)結(jié)尾知允,當(dāng)請(qǐng)求的方法是POST的時(shí)候,會(huì)在首部行結(jié)尾再回車換行加上POST攜帶的實(shí)體數(shù)據(jù)叙谨。

請(qǐng)求行 \r\n
首部行 \r\n
\r\n
實(shí)體行

請(qǐng)求行

  • 方法字段:
    • GET(主要方法)
    • POST
    • HEAD
    • PUT
    • DELETE
  • URI字段:請(qǐng)求對(duì)象的標(biāo)識(shí)
  • HTTP版本字段:有HTTP/1.0和HTTP/1.1兩種

首部行

  • Host:要訪問(wèn)的主機(jī)名
  • Connection:值為keep-alive表示該連接為持續(xù)連接温鸽,為close表示非持續(xù)連接。
  • Accept: 可接受的MIME類型,即報(bào)文類型涤垫。
  • User-Agent: 用戶代理姑尺, 表示請(qǐng)求的瀏覽器的類型。
  • Referer: 表示發(fā)出請(qǐng)求時(shí)處于哪個(gè)頁(yè)面蝠猬,可用做反盜鏈切蟋。
  • Accept-Encoding: 告訴服務(wù)器自己接受的頁(yè)面編碼。
  • Accept-Language: 告訴服務(wù)器自己接受的網(wǎng)頁(yè)語(yǔ)言榆芦。
  • Cookie: 將服務(wù)器存儲(chǔ)在瀏覽器本地的Cookie值發(fā)送給服務(wù)器柄粹,實(shí)現(xiàn)無(wú)狀態(tài)的。HTTP協(xié)議的會(huì)話跟蹤匆绣。

響應(yīng)報(bào)文

請(qǐng)求報(bào)文是服務(wù)器向?yàn)g覽器發(fā)出響應(yīng)報(bào)文驻右,由第一行的狀態(tài)行、接著首部行崎淳、最后的實(shí)體行組成堪夭,每一行都由回車換行(\r\n)結(jié)尾,其中實(shí)體行就是請(qǐng)求的數(shù)據(jù)拣凹。

狀態(tài)行 \r\n
首部行 \r\n
\r\n
實(shí)體行

狀態(tài)行

  • 協(xié)議版本:有HTTP/1.0和HTTP/1.1兩種
  • 狀態(tài)碼:
    • 200:成功森爽。
    • 301:內(nèi)容已經(jīng)永久移動(dòng),瀏覽器會(huì)重定向到響應(yīng)指定的新URI嚣镜。
    • 302:內(nèi)容臨時(shí)移動(dòng)
    • 304:內(nèi)容未被修改拗秘,響應(yīng)不包含內(nèi)容
    • 400:請(qǐng)求不能被服務(wù)器理解。
    • 403:無(wú)權(quán)訪問(wèn)該文件祈惶。
    • 404:不能找到請(qǐng)求文件雕旨。
    • 500:服務(wù)器內(nèi)部錯(cuò)誤。
    • 501:服務(wù)器不支持請(qǐng)求的方法捧请。
    • 505:服務(wù)器不支持請(qǐng)求的版本凡涩。
  • 狀態(tài)信息:狀態(tài)碼的含義

首部行

  • Connection:值為keep-alive表示該連接為持續(xù)連接,為close表示非持續(xù)連接疹蛉。
  • Date:表示報(bào)文發(fā)送的時(shí)間活箕。
  • Server:Web服務(wù)器用來(lái)處理請(qǐng)求的軟件信息。
  • Cache-control:緩存控制
  • ETag:響應(yīng)對(duì)象的標(biāo)識(shí)符
  • Last-Modfied:對(duì)象創(chuàng)建或者最后修改的時(shí)間可款。
  • Content-Encoding:Web服務(wù)器表明了自己用什么壓縮方法壓縮對(duì)象育韩。
  • Content-Length:被發(fā)送的對(duì)象的字節(jié)數(shù)。
  • Content-Type:表示響應(yīng)的實(shí)體行的對(duì)象類型闺鲸。

緩存機(jī)制

HTTP的緩存機(jī)制是通過(guò)Cache-control字段來(lái)控制筋讨,Cache-control是一個(gè)通用首部,請(qǐng)求和響應(yīng)的首部都可以使用摸恍,有幾個(gè)常見的值:

  • private: 只允許發(fā)出請(qǐng)求的客戶端緩存
  • public: 允許客戶端和代理服務(wù)器緩存
  • max-age=x: 緩存的有效期為x秒
  • no-cache: 不直接使用緩存悉罕,使用前得向服務(wù)器發(fā)出請(qǐng)求驗(yàn)證緩存有效性
    • If-None-Match/Etag:當(dāng)緩存的內(nèi)容具有Etag標(biāo)識(shí)赤屋,就向服務(wù)器發(fā)送含有If-None-Match字段的請(qǐng)求報(bào)文以判斷緩存的內(nèi)存是否與服務(wù)器上的內(nèi)容一致,如果一致壁袄,服務(wù)器就會(huì)返回304狀態(tài)的響應(yīng)報(bào)文表示可以直接使用緩存类早,否則返回200狀態(tài)含有新資源實(shí)體的響應(yīng)報(bào)文。
    • If-Modified-Since/Last-Modified:當(dāng)緩存的內(nèi)容具有Last-Modified(最后修改時(shí)間)嗜逻,就向服務(wù)器發(fā)送含有If-Modified-Since字段的請(qǐng)求報(bào)文以判斷緩存的內(nèi)存在服務(wù)器上的是否改變涩僻,如果時(shí)間一致,就會(huì)返回304狀態(tài)的響應(yīng)表示可以直接使用緩存栈顷,否則返回200狀態(tài)含有新資源實(shí)體的響應(yīng)報(bào)文令哟。
  • no-store: 所有內(nèi)容都不會(huì)緩存
HTTP緩存的使用

HTTPS

HTTPS中的S指的是SSL(安全套接字層)或TLS(傳輸層安全),TLS是基于SSL開發(fā)的妨蛹。

HTTP的缺點(diǎn)

HTTP屬于不安全的通信協(xié)議:

  • 使用明文不加密,內(nèi)容容易被竊讀
  • 不能驗(yàn)證對(duì)方身份晴竞,對(duì)方可能是一個(gè)偽裝的通訊方
  • 無(wú)法驗(yàn)證報(bào)文的完整性蛙卤,報(bào)文可能被篡改

加密算法

要解決第一個(gè)問(wèn)題必須采用加密算法對(duì)報(bào)文進(jìn)行加密,常見的加密算法有對(duì)稱加密(AES算法噩死,加密解密使用同一把秘鑰)颤难、非對(duì)稱加密(RSA算法,加密和解密采用不同秘鑰)已维,HTTPS采用混合加密算法集合和兩者的優(yōu)點(diǎn)行嗤。由于非對(duì)稱加密開銷比對(duì)稱加密大,所以通信過(guò)程中報(bào)文的加密采用對(duì)稱加密垛耳,而非對(duì)稱加密用于一開始共享秘鑰的傳輸栅屏。

通信過(guò)程

  • 客戶端發(fā)出請(qǐng)求報(bào)文,報(bào)文包含客戶端支持的SSL協(xié)議版本堂鲜、加密算法栈雳。

  • 服務(wù)器發(fā)送數(shù)字證書,數(shù)字證書可以向數(shù)字證書認(rèn)證機(jī)構(gòu)申請(qǐng)缔莲,證書包含以下內(nèi)容:

    • 證書的發(fā)布機(jī)構(gòu)CA
    • 證書的有效期
    • 證書所有人的名稱
    • 公開秘鑰
    • 簽名算法
    • 數(shù)字簽名(證書內(nèi)容摘要值的加密結(jié)果)
  • 客戶端收到證書后驗(yàn)證證書的合法性哥纫。數(shù)字簽名是數(shù)字證書機(jī)構(gòu)使用私鑰進(jìn)行加密的結(jié)果,得在瀏覽器本地可以找到對(duì)應(yīng)的公鑰進(jìn)行解密痴奏,為了保證證書沒(méi)有被篡改蛀骇,客戶端會(huì)根據(jù)簽名算法計(jì)算出證書內(nèi)容的摘要值(哈希算法),如與解密后的數(shù)字簽名一致的話就證明內(nèi)容沒(méi)有被篡改并且對(duì)方是一個(gè)合法通信方读拆。

  • 隨后客戶端產(chǎn)生一個(gè)pre-master secret的隨機(jī)數(shù)用于對(duì)稱加密擅憔,使用數(shù)字證書里的公開秘鑰對(duì)隨機(jī)數(shù)加密并發(fā)送給服務(wù)器。

  • 服務(wù)器收到包含共享秘鑰的報(bào)文后用自己的私鑰解密得到共享秘鑰檐晕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雕欺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屠列,老刑警劉巖啦逆,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異笛洛,居然都是意外死亡夏志,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門苛让,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沟蔑,“玉大人,你說(shuō)我怎么就攤上這事狱杰∈莶模” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵仿畸,是天一觀的道長(zhǎng)食棕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)错沽,這世上最難降的妖魔是什么簿晓? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮千埃,結(jié)果婚禮上憔儿,老公的妹妹穿的比我還像新娘。我一直安慰自己放可,他們只是感情好谒臼,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耀里,像睡著了一般屋休。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上备韧,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天劫樟,我揣著相機(jī)與錄音,去河邊找鬼织堂。 笑死叠艳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的易阳。 我是一名探鬼主播附较,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼潦俺!你這毒婦竟也來(lái)了拒课?” 一聲冷哼從身側(cè)響起徐勃,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎早像,沒(méi)想到半個(gè)月后僻肖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卢鹦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年臀脏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冀自。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡揉稚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出熬粗,到底是詐尸還是另有隱情搀玖,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布驻呐,位于F島的核電站灌诅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏暴氏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一绣张、第九天 我趴在偏房一處隱蔽的房頂上張望答渔。 院中可真熱鬧,春花似錦侥涵、人聲如沸沼撕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)务豺。三九已至,卻和暖如春嗦明,著一層夾襖步出監(jiān)牢的瞬間笼沥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工娶牌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奔浅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓诗良,卻偏偏與公主長(zhǎng)得像汹桦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鉴裹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

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