一 Http協(xié)議的簡(jiǎn)介
物理層、數(shù)據(jù)鏈路層谜喊、網(wǎng)絡(luò)層、傳輸層山卦、應(yīng)用層【TCP/IP五層模型的協(xié)議】
一個(gè)超文本傳輸標(biāo)準(zhǔn)诵次,底層是TCP協(xié)議
1、一些基本概念
1)協(xié)議:指計(jì)算機(jī)通信網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或規(guī)則
2)HTTP協(xié)議:超文本傳輸協(xié)議是一種通信協(xié)議剔猿,它允許將超文本標(biāo)記語言(HTML)文檔從Web服務(wù)器傳送到客戶端的瀏覽器
2嬉荆、URI和URL的區(qū)別
URI:是uniform resource identifier,統(tǒng)一資源標(biāo)識(shí)符汪茧,用來唯一的標(biāo)識(shí)一個(gè)資源
file://a:1234/b/c/d.txt
URI的三個(gè)組成部分:1.訪問資源的命名機(jī)制限番;2.存放資源的主機(jī)名弥虐;3.資源自身的名稱,由路徑表示霜瘪,著重強(qiáng)調(diào)于資源
URL:是uniform resource locator,統(tǒng)一資源定位器颖对,它是一種具體的URI,即URL可以用來標(biāo)識(shí)一個(gè)資源,而且還指明了如何locate這個(gè)資源缤底。
www.baidu.com
三個(gè)組成部分:1.協(xié)議个唧;2.存在該資源的主機(jī)ip地址;3.主機(jī)資源的具體地址
二 Http協(xié)議特點(diǎn)
1)簡(jiǎn)單快速
2)無連接坑鱼,限制每次連接只處理一個(gè)請(qǐng)求
3)無狀態(tài)
三 request/response:原理
打開瀏覽器鲁沥,在地址欄中輸入U(xiǎn)RL,然后我們就看到了網(wǎng)頁。原理是怎么樣的彭谁?
【當(dāng)用戶在瀏覽器輸入一個(gè)URL時(shí)允扇,訪問的大致流程如下:
1.首先瀏覽器會(huì)向DNS服務(wù)器查詢輸入的URL對(duì)應(yīng)的ip地址;
2.然后DNS返回該URL對(duì)應(yīng)網(wǎng)站的ip地址狭园;
3.瀏覽器再向根據(jù)網(wǎng)站的ip地址與目標(biāo)web服務(wù)器的80端口進(jìn)行TCP連接糊治;
4.瀏覽器獲取請(qǐng)求網(wǎng)站頁面的HTML代碼;
5.瀏覽器在顯示窗口內(nèi)渲染HTML绎谦;
6.窗口關(guān)閉時(shí)粥脚,瀏覽器終止與web服務(wù)器的連接;】
四 容易混淆的知識(shí)點(diǎn)
1、Http1.1和1.0的區(qū)別冤留?树灶??肪跋?土砂?
1)1.0產(chǎn)生的背景
超文本傳輸協(xié)議伴隨著計(jì)算機(jī)網(wǎng)絡(luò)和瀏覽器的誕生,Http1.0也隨之而來吴叶,處于計(jì)算機(jī)網(wǎng)絡(luò)中的應(yīng)用層序臂。
早在我們http1.0建立的開始的時(shí)候主要是為了將我們的html文檔從我們的web服務(wù)器傳輸?shù)娇蛻舳藶g覽器实束。
2)1.0所做的優(yōu)化
帶寬:現(xiàn)階段已經(jīng)解決
延遲:1.瀏覽器阻塞:瀏覽器對(duì)于同一個(gè)域名咸灿,同時(shí)只能有4個(gè)連接
2.DNS查詢:瀏覽器需要知道目標(biāo)服務(wù)器的IP才能建立連接
3.建立連接:三次握手
3)1.1和1.0的具體區(qū)別
1.緩存處理:1.0使用頭部的If-Modified-Since來作為判斷標(biāo)準(zhǔn)侮叮。
而1.1引入了更多緩存策略,Etag和If-None-Match
2.帶寬優(yōu)化及網(wǎng)絡(luò)連接的使用
HTTP/1.1加入了一個(gè)新的狀態(tài)碼100(Continue)审胸⌒渡祝客戶端事先發(fā)送一個(gè)只帶頭域的請(qǐng)求,如果服務(wù)器因?yàn)闄?quán)限拒絕了請(qǐng)求尺上,就回送響應(yīng)碼401(Unauthorized)圆到;如果服務(wù)器接收此請(qǐng)求就回送響應(yīng)碼100,客戶端就可以繼續(xù)發(fā)送帶實(shí)體的完整請(qǐng)求了马绝。100 (Continue) 狀態(tài)代碼的使用挣菲,允許客戶端在發(fā)request消息body之前先用request header試探一下server,看server要不要接收request body椭赋,再?zèng)Q定要不要發(fā)request body或杠。
1.1中引入范圍range的區(qū)域【斷點(diǎn)續(xù)傳】
3.Host頭處理
【HTTP 1.1增加host字段】
在HTTP1.0中認(rèn)為每臺(tái)服務(wù)器都綁定一個(gè)唯一的IP地址向抢,因此,請(qǐng)求消息中的URL并沒有傳遞主機(jī)名(hostname)挟鸠。但隨著虛擬主機(jī)技術(shù)的發(fā)展艘希,在一臺(tái)物理服務(wù)器上可以存在多個(gè)虛擬主機(jī)(Multi-homed Web Servers)硅急,并且它們共享一個(gè)IP地址佳遂。
HTTP1.1的請(qǐng)求消息和響應(yīng)消息都應(yīng)支持Host頭域,且請(qǐng)求消息中如果沒有Host頭域會(huì)報(bào)告一個(gè)錯(cuò)誤(400 Bad Request)。此外巍糯,服務(wù)器應(yīng)該接受以絕對(duì)路徑標(biāo)記的資源請(qǐng)求客扎。
4.長(zhǎng)連接
HTTP 1.0不支持長(zhǎng)連接,每次請(qǐng)求都需要與服務(wù)器建立一個(gè)TCP連接宅楞,服務(wù)器完成請(qǐng)求處理后立即斷開TCP連接袱吆。還有不支持?jǐn)帱c(diǎn)續(xù)傳。
HTTP 1.1則支持持久連接, 并且默認(rèn)使用持久連接. 在同一個(gè)tcp的連接中可以傳送多個(gè)HTTP請(qǐng)求和響應(yīng). 多個(gè)請(qǐng)求和響應(yīng)可以重疊婶希,多個(gè)請(qǐng)求和響應(yīng)可以同時(shí)進(jìn)行蓬衡。
【1.1支持長(zhǎng)連接狰晚,減少建立和關(guān)閉連接的時(shí)間】
4)1.1和1.0存在的問題
1.Http1.0在傳輸數(shù)據(jù)時(shí),每次都需要重新建立連接瓷们,無疑增加了大量的延遲時(shí)間【這個(gè)主要針對(duì)1.0】
2.Http1.x在傳輸數(shù)據(jù)時(shí)秒咐,所有傳輸?shù)膬?nèi)容都是明文,客戶端和服務(wù)端都無法驗(yàn)證對(duì)方的身份【解決方法固蚤,通過Https來保證我們的數(shù)據(jù)和內(nèi)容安全】
3.Http1.x在使用時(shí)歹茶,header里攜帶的內(nèi)容過大你弦,在一定程度上增加了傳輸?shù)某杀?4.雖然Http1.1支持了keep-alive,來彌補(bǔ)多次創(chuàng)建連接產(chǎn)生的延遲燎孟,但是
keep-alive使用多了同樣會(huì)給服務(wù)端帶來大量的性能壓力【1.1】
2揩页、get/post方法的區(qū)別
1)提交的數(shù)據(jù)位置:get放在url后面,post放在 body中
2)提交數(shù)據(jù)的大小是否有限制:因?yàn)闉g覽器對(duì)Url的大小有限制萍程,
3)取得變量的值兔仰,get通過Request.QueryString來獲取,post通過Request.Form來獲取
4)安全問題忍法,URL可以被瀏覽器緩存榕吼,內(nèi)可能包含敏感信息
3、cookie和session的區(qū)別
1)Cookie
Cookie技術(shù)是客戶端的解決方案,Cookie就是由服務(wù)器端發(fā)送給客戶端的特殊信息踢匣,而這些信息以文本文件的方式存放在客戶端戈抄,然后客戶端每次向服務(wù)器發(fā)送請(qǐng)求的時(shí)候都會(huì)帶上這些特殊的信息
- Session
Session是另一種記錄客戶狀態(tài)的機(jī)制,不同的是Cookie保存在客戶端瀏覽器中输莺,而Session保存在服務(wù)器上裸诽。客戶端瀏覽器訪問服務(wù)器的時(shí)候嘱函,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上埂蕊。
session的工作原理:
1.第一步當(dāng)然是創(chuàng)建session了
2.在創(chuàng)建了session的同時(shí),服務(wù)器會(huì)為該session生成唯一的session id
3.在session被創(chuàng)建之后函似,就可以通過session相關(guān)的方法往session中增加內(nèi)容
4.當(dāng)客戶端再次發(fā)送請(qǐng)求的時(shí)候撇寞,會(huì)將這個(gè)session id 帶上,服務(wù)器接受到請(qǐng)求之后就會(huì)一句session id 找到相應(yīng)的session
- 區(qū)別
1.存放位置不同蔑担。Cookie存儲(chǔ)在客戶端钟沛,session存儲(chǔ)在服務(wù)端
2.存取方式不同局扶。cookie存儲(chǔ)的ask?畜埋?字符串畴蒲,session存儲(chǔ)任何類型的數(shù)據(jù)
3.安全性不同。cookie對(duì)客戶端是可見的可以被修改咖祭,session存儲(chǔ)在服務(wù)器蔫骂,
隱私性優(yōu)于cookie.
4.有效期。cookie的有效期一般較長(zhǎng)浩嫌。session补胚,當(dāng)設(shè)置為-1的時(shí)候溶其,關(guān)閉瀏覽器后session即失效。
5.對(duì)服務(wù)器造成的壓力不同桦沉。
并發(fā)多的時(shí)候cookie是個(gè)很好的選擇。
4 Etag/if-one Match referer
而ETag/If-None-Match則是上文大話中說的第二種check服務(wù)端文件是否更新的方式剿骨,也要配合Cache-Control使用埠褪。實(shí)際上ETag并不是文件的版本號(hào),而是一串可以代表該文件唯一的字符串(Apache中贷掖,ETag的值渴语,默認(rèn)是對(duì)文件的索引節(jié)(INode),大醒栏Α(Size)和最后修改時(shí)間(MTime)進(jìn)行Hash后得到的调违。)技肩,當(dāng)客戶端發(fā)現(xiàn)和服務(wù)器約定的直接讀取緩存的時(shí)間過了,就在請(qǐng)求中發(fā)送If-None-Match選項(xiàng)虚婿,值即為上次請(qǐng)求后響應(yīng)頭的ETag值然痊,該值在服務(wù)端和服務(wù)端代表該文件唯一的字符串對(duì)比(如果服務(wù)端該文件改變了,該值就會(huì)變)爽丹,如果相同辛蚊,則相應(yīng)HTTP304袋马,客戶端直接讀取緩存,如果不相同,HTTP200软啼,下載正確的數(shù)據(jù)延柠,更新ETag值。