HTTP協(xié)議:超文本傳輸協(xié)議
是一種詳細(xì)規(guī)定了瀏覽器和萬(wàn)維網(wǎng)(www)服務(wù)器之間互相通信的規(guī)則,通過(guò)因特網(wǎng)傳送萬(wàn)維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議
HTTP是基于TCP的應(yīng)用層協(xié)議
Host:指明了該對(duì)象所在的主機(jī) Connection:Keep-Alive 首部行用來(lái)表明該瀏覽器告訴服務(wù)器使用持續(xù)連接 Content-Type: x-www-form-urlencoded 首部行用來(lái)表明 HTTP 會(huì)將請(qǐng)求參數(shù)用 key1=val1&key2=val2 的方 式進(jìn)行組織王带,并放到請(qǐng)求實(shí)體里面 User-agent:首部行用來(lái)指明用戶(hù)代理,即向服務(wù)器發(fā)送請(qǐng)求的瀏覽器類(lèi)型 Accept-lauguage:首部行表示用戶(hù)想得到該對(duì)象的法語(yǔ)版本(如果服務(wù)器中有這樣的對(duì)象的話(huà))么介,否則鹃答, 服務(wù)器應(yīng)發(fā)送它的默認(rèn)版本
一些常見(jiàn)的狀態(tài)碼和對(duì)應(yīng)的短語(yǔ):
? 200 OK:請(qǐng)求成功,信息在返回的響應(yīng)報(bào)文中
? 301 Moved Permanently:請(qǐng)求的對(duì)象已經(jīng)被永久轉(zhuǎn)移了李滴,新的 URL 定義在響應(yīng)報(bào)文中的 Location:首 部行中螃宙。客戶(hù)軟件將自動(dòng)獲取新的 URL
? 400 Bad Request:一個(gè)通用差錯(cuò)代碼所坯,指示該請(qǐng)求不能被服務(wù)器理解
? 404 Not Found:被請(qǐng)求的文件不在服務(wù)器上
? 505 HTTP Version Not Supported:服務(wù)器不支持請(qǐng)求報(bào)文使用的 HTTP 協(xié)議版本 <4 開(kāi)頭的狀態(tài)碼通常是客戶(hù)端的問(wèn)題污呼,5 開(kāi)頭的則通常是服務(wù)端的問(wèn)題>
Connection:close 首部行告訴客戶(hù),發(fā)送完報(bào)文后將關(guān)閉 TCP 連接包竹。
Date:指的不是對(duì)象創(chuàng)建或最后修改的時(shí)間燕酷,而是服務(wù)器從文件系統(tǒng)中檢索到該對(duì)象,插入到響應(yīng)報(bào)文周瞎, 并發(fā)送該響應(yīng)報(bào)文的時(shí)間苗缩。 Server: 首部行指示該報(bào)文是由一臺(tái) Apache Web 服務(wù)器產(chǎn)生的,類(lèi)似于 HTTP 請(qǐng)求報(bào)文里的 User-agent
Content-Length:首部行指示了被發(fā)送對(duì)象中的字節(jié)數(shù) Content-Type:首部行指示了實(shí)體體中的對(duì)象是 HTML 文本
HTTP的請(qǐng)求方式
GET声诸、POST酱讶、PUT、DELETE彼乌、HEAD泻肯、OPTIONS
1、GET 和 POST 方式的區(qū)別
GET 的請(qǐng)求參數(shù)一般以?分割拼接到 URL 后面慰照,POST 請(qǐng)求參數(shù)在 Body 里面
GET 參數(shù)長(zhǎng)度限制為 2048 個(gè)字符灶挟,POST 一般是沒(méi)限制的
GET 請(qǐng)求由于參數(shù)裸露在 URL 中, 是不安全的毒租,POST 請(qǐng)求則是相對(duì)安全
之所以說(shuō)是相對(duì)安全稚铣,是因?yàn)椋绻?POST 雖然參數(shù)非明文墅垮,但如果被抓包惕医,GET 和 POST 一樣都是不 安全的。(HTTPS 該用還是得用)
而從語(yǔ)義的角度來(lái)看: GET:獲取資源是 安全的算色,冪等的(只讀的抬伺,純粹的), 可緩存的 POST:獲取資源是 非安全的灾梦,非冪等的峡钓,不可緩存的
GET 和 POST 本質(zhì)上就是 TCP 鏈接齐鲤,并無(wú)差別。但是由于 HTTP 的規(guī)定和瀏覽器/服務(wù)器的限制椒楣,導(dǎo)致他們 在應(yīng)用過(guò)程中體現(xiàn)出一些不同给郊。 在響應(yīng)時(shí),GET 產(chǎn)生一個(gè) TCP 數(shù)據(jù)包捧灰;POST 產(chǎn)生兩個(gè) TCP 數(shù)據(jù)包: 對(duì)于 GET 方式的請(qǐng)求淆九,瀏覽器會(huì)把 Header 和實(shí)體主體一并發(fā)送出去,服務(wù)器響應(yīng) 200(返回?cái)?shù)據(jù))毛俏;
而對(duì)于 POST炭庙,瀏覽器先發(fā)送 Header,服務(wù)器響應(yīng) 100 Continue煌寇,瀏覽器再發(fā)送實(shí)體主體焕蹄,服務(wù)器響應(yīng) 200 OK (返回?cái)?shù)據(jù))。
2阀溶、GET 相對(duì) POST 的優(yōu)勢(shì)是什么腻脏?
1、最大的優(yōu)勢(shì)就是方便银锻。GET 的 URL 可以直接手輸永品,從而 GET 請(qǐng)求中的 URL 可以被存在書(shū)簽里,或者歷 史記錄里
2击纬、可以被緩存鼎姐,大大減輕服務(wù)器的負(fù)擔(dān) 所以大多數(shù)情況下,還是用 GET 比較好更振。
1炕桨、HTTPS 和 HTTP 的區(qū)別 ?
HTTPS 協(xié)議 = HTTP 協(xié)議 + SSL/TLS 協(xié)議 SSL 的全稱(chēng)是 Secure Sockets Layer,即安全套接層協(xié)議肯腕,是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安 全協(xié)議献宫。TLS 的全稱(chēng)是 Transport Layer Security,即安全傳輸層協(xié)議乎芳。 即 HTTPS 是安全的 HTTP遵蚜。
對(duì)稱(chēng)加密和非對(duì)稱(chēng)加密
1、對(duì)稱(chēng)加密: 用同一套密鑰來(lái)進(jìn)行加密解密奈惑。 對(duì)稱(chēng)加密通常有 DES,IDEA,3DES 加密算法。
2睡汹、非對(duì)稱(chēng)加密: 用公鑰和私鑰來(lái)加解密的算法肴甸。 公鑰(Public Key)與私鑰(Private Key)是通過(guò)一種算法得到的一個(gè)密鑰對(duì)(即一個(gè)公鑰和一個(gè)私鑰), 公鑰是密鑰對(duì)中公開(kāi)的部分囚巴,私鑰則是非公開(kāi)的部分,私鑰通常是保存在本地原在。
用公鑰進(jìn)行加密友扰,就要用私鑰進(jìn)行解密;反之庶柿,用私鑰加密村怪,就要用公鑰進(jìn)行解密(數(shù)字簽名)。
由于私鑰是保存在本地的浮庐,所以非對(duì)稱(chēng)加密相對(duì)與對(duì)稱(chēng)加密是安全的甚负。
但非對(duì)稱(chēng)加密比對(duì)稱(chēng)加密耗時(shí)(100 倍以上),所以通常要結(jié)合對(duì)稱(chēng)加密來(lái)使用。
常見(jiàn)的非對(duì)稱(chēng)加密算法有:RSA审残、ECC(移動(dòng)設(shè)備用)梭域、Diffie-Hellman、El Gamal搅轿、DSA(數(shù)字簽名用)
3病涨、TCP 在創(chuàng)建連接時(shí),為什么需要三次握手而不是兩次或四次(三次握手璧坟、四次揮手)既穆?
一個(gè)簡(jiǎn)單的例子:
? 三次握手: “喂,你聽(tīng)得到嗎雀鹃?” “我聽(tīng)得到呀循衰,你聽(tīng)得到我嗎?” “我能聽(tīng)到你褐澎,今天 balabala……”
? 兩次握手: “喂会钝,你聽(tīng)得到嗎?” “我聽(tīng)得到呀工三,你聽(tīng)得到我嗎迁酸?” “喂,你聽(tīng)得到嗎俭正?” “……誰(shuí)在說(shuō)話(huà)奸鬓?” “喂,你聽(tīng)得到嗎掸读?” “……”
? 四次握手: “喂串远,你聽(tīng)得到嗎?” “我聽(tīng)得到呀”“你能聽(tīng)到我嗎儿惫?” “……不想跟傻逼說(shuō)話(huà)”
之所以不用四次握手的原因很容易理解澡罚,就是浪費(fèi)資源,服務(wù)端的 SYN 和 ACK 可以一起發(fā)肾请,完全沒(méi)必要分 開(kāi)兩次