HTTP
1、什么是TCP/IP
不同的硬件、操作系統(tǒng)之間進(jìn)行通信,需要一種規(guī)則,我們把這種規(guī)則稱做,網(wǎng)絡(luò)傳輸?shù)母鱾€(gè)階段有不同的,這些的集合總稱為TCP/IP。http是TCP/IP的子集。
2、TCP/IP分層及各層的作用?
分為四層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層。
應(yīng)用層:http屬于這一層,在這一層根據(jù)http生成針對(duì)目標(biāo)服務(wù)器的http請(qǐng)求報(bào)文,服務(wù)器端根據(jù)http解析報(bào)文。
傳輸層:TCP屬于這一層,在這一層將根據(jù)TCP將http的請(qǐng)求報(bào)文分割成報(bào)文段,在服務(wù)器端會(huì)根據(jù)TCP合并報(bào)文段。建立和斷開TCP連接的過程就是三次握手,四次揮手。
網(wǎng)絡(luò)層:IP屬于這一層,網(wǎng)絡(luò)層的作用是確定數(shù)據(jù)傳輸?shù)穆肪€。根據(jù)IP搜索對(duì)方地址,并一邊中轉(zhuǎn)一邊傳送。IP地址指明了節(jié)點(diǎn)被分配的地址,MAC地址是網(wǎng)卡所屬的固定地址,IP地址可以變,MAC一般不變。整個(gè)中轉(zhuǎn)的過程像是送快遞,用戶把數(shù)據(jù)送到快遞站,快遞公司再送到一個(gè)個(gè)大型中轉(zhuǎn)站。
鏈路層:網(wǎng)絡(luò)傳輸過程中的硬件部分。
過程:客戶端發(fā)出請(qǐng)求->應(yīng)用層發(fā)送http請(qǐng)求報(bào)文->傳輸層建立TCP連接,將報(bào)文分成報(bào)文段->網(wǎng)絡(luò)層根據(jù)請(qǐng)求的ip地址,進(jìn)行處理并加上MAC地址后交給鏈路層->鏈路層將數(shù)據(jù)送到請(qǐng)求的ip地址->請(qǐng)求ip的服務(wù)器根據(jù)IP,TCP,HTTP對(duì)數(shù)據(jù)進(jìn)行拼接等處理->服務(wù)器收到請(qǐng)求。
3、DNS是什么?
DNS是和http一樣位于應(yīng)用層的,用于解析域名,DNS提供通過域名查找IP地址或者IP地址反查域名的服務(wù)。
4、URI和URL的區(qū)別
URI是統(tǒng)一資源標(biāo)識(shí)符,URL是統(tǒng)一資源定位符,URL是URI的子集。
URI格式:名/方案名+登錄信息(可選)+服務(wù)器地址(網(wǎng)址或ip)+端口號(hào)(可選)+文件路徑+參數(shù)(可選)+片段標(biāo)識(shí)符(可選,哈希值)
兩者區(qū)別就就是URL是確定了文件的路徑,而URI只是的標(biāo)識(shí)出文件,但是不一定是該文件的路徑。
5、什么是持久連接?
如果一個(gè)請(qǐng)求就建立一次TCP連接,那么過程太費(fèi)時(shí)間,資源,效率低下。所以,持久化連接就是三次握手建立TCP連接后,一直保持連接,直到四次揮手,才斷開連接。
6、什么是管線化?
因?yàn)槌志眠B接,所以不必等一個(gè)請(qǐng)求響應(yīng)后再發(fā)起下一個(gè)請(qǐng)求,可以同時(shí)發(fā)送多個(gè)請(qǐng)求。大大節(jié)省了時(shí)間。
7、cookie的誕生原因?
http是無狀態(tài)的,不會(huì)保存之前一切請(qǐng)求的報(bào)文信息,所以假設(shè)有一個(gè)網(wǎng)站需要登錄,用戶登錄之后,在之后的訪問過程中怎么保持登錄狀態(tài),就成為一個(gè)問題。解決方法就是引入cookie技術(shù)。
8、關(guān)于cookie的知識(shí)
cookie是為了用戶識(shí)別和狀態(tài)管理,web網(wǎng)站為了管理用戶狀態(tài),會(huì)把一些數(shù)據(jù)臨時(shí)寫入用戶的計(jì)算機(jī)內(nèi),當(dāng)用戶訪問該網(wǎng)站時(shí),可取回之前存放的cookie。
1)cookie是不可跨域的,每個(gè)域名下的cookie是單獨(dú)保存的,不會(huì)混用。在一個(gè)頁面下發(fā)送的請(qǐng)求,帶的都是當(dāng)前域名下的cookie。
2)cookie的重要屬性
name:cookie的名字,同域名下name不能相同,否則會(huì)被覆蓋
value:cookie的值
path:路由
secure:打鉤時(shí),只會(huì)在https等安全下傳輸這個(gè)cookie
HttpOnly:打鉤時(shí),則不能通過js獲取,防止xss攻擊
Expires/Max-age:cookie有效期,當(dāng)為session時(shí),關(guān)閉瀏覽器(非頁面)就會(huì)清除。
若為過期時(shí)間,則到時(shí)間時(shí)瀏覽器自動(dòng)刪除。
復(fù)制代碼
3)服務(wù)端一旦通過set-cookie將cookie存儲(chǔ)到客戶端,就沒有方法可以直接刪除,而只能通過覆蓋的方式刪除。
9、狀態(tài)碼
狀態(tài)碼分為5大類:
1XX:信息狀態(tài)類
2XX:成功類
3XX:重定向類
4XX:客戶端錯(cuò)誤類
5XX:服務(wù)端錯(cuò)誤類
復(fù)制代碼
不能完全相信狀態(tài)碼,有時(shí)候返回的狀態(tài)碼和實(shí)際情況是不一致的??!
200:正常處理
301:永久重定向,瀏覽器自動(dòng)再次發(fā)送新的請(qǐng)求
302:臨時(shí)重定向,瀏覽器自動(dòng)再次發(fā)送新的請(qǐng)求
303:與302相似,但表示客戶端應(yīng)該采用get方法獲取新的資源,瀏覽器自動(dòng)再次發(fā)送新的請(qǐng)求
304:附帶條件未滿足,和重定向沒有關(guān)系,服務(wù)器可通過此狀態(tài)碼高速客戶端,使用本地緩存
403:服務(wù)端拒絕了請(qǐng)求,但沒有給具體原因
404:服務(wù)器上沒有請(qǐng)求的資源
500:服務(wù)器在執(zhí)行的時(shí)候發(fā)生了錯(cuò)誤
503:服務(wù)器超負(fù)載或停機(jī)維護(hù)
復(fù)制代碼
10、一臺(tái)服務(wù)器多個(gè)域名,IP地址一樣,怎么區(qū)分
利用虛擬主機(jī)的技術(shù),可以實(shí)現(xiàn)一臺(tái)物理服務(wù)器上,部署多個(gè)域名,但是用DNS服務(wù)解析多個(gè)域名的時(shí)候,解析成的ip地址是一樣的,那怎么區(qū)分請(qǐng)求的是哪個(gè)資源呢?
利用請(qǐng)求頭里的host字段來指定主機(jī)名或者是域名的URI,host一般只是發(fā)送域名,而referer則是完整的url地址,origin則是跨域的時(shí)候發(fā)送的。
11、代理服務(wù)器
代理服務(wù)器:接收客戶端請(qǐng)求,轉(zhuǎn)發(fā)給其他服務(wù)器,代理服務(wù)器根據(jù)兩個(gè)維度,可分為緩存代理,非緩存代理。透明代理和非透明代理(對(duì)數(shù)據(jù)進(jìn)行處理)。
12、常用報(bào)文頭部字段
cache-control:控制緩存的行為
connection:管理連接,keep-alive持久連接
cookie:
set-cookie:設(shè)置cookie
referer:當(dāng)前請(qǐng)求的原始頁面
cache-control:控制瀏覽器緩存
Last-Modified:較后一次新時(shí)間
if-Modified-Since
Etag
If-None-Match
復(fù)制代碼
13、get和post的區(qū)別
get和post是http中規(guī)定的,告知服務(wù)器意圖的方法。使用get方法用來請(qǐng)求已被URI識(shí)別的資源,而post方法用來傳輸實(shí)體主體,但get請(qǐng)求也可以發(fā)送實(shí)體,post請(qǐng)求也可以在url上加參數(shù)。本質(zhì)上,兩者都是TCP連接,區(qū)別是get發(fā)送一次數(shù)據(jù)包,post發(fā)送兩次數(shù)據(jù)包。
在表面上,get和post的區(qū)別如下:
1、關(guān)于傳入?yún)?shù)的大小限制,http里沒有規(guī)定,只不過是瀏覽器和服務(wù)器的約定俗稱。
2、關(guān)于傳遞參數(shù)的安全性,get請(qǐng)求的url是在服務(wù)器上有日志記錄,在瀏覽器也能查到歷史記錄,但是post請(qǐng)求的參數(shù)都在body里面,服務(wù)器日志記錄不到,瀏覽器歷史也記錄不到,所以相對(duì)來說安全些。
3、get請(qǐng)求可以緩存,post請(qǐng)求不能緩存
微信選課
享更多優(yōu)質(zhì)好課!