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