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