http與tcp面試題3

2021-09-02 13:27:24 字數 2288 閱讀 6808

1、http/1.0、http/1.1和http2.0有什麼區別。

(1)、http/1.0協議預設使用非持久連線(短連線),既在非持久連線下,伺服器處理完客戶端乙個請求後立即斷開tcp連線,下次客戶端再次請求需要重新建立連線,伺服器不跟蹤每個客戶,也不記錄過去的請求。

(2)、http/1.1協議預設使用持久連線(長連線),即在長連線的情況下,伺服器處理完客戶端請求後不立即關閉乙個tcp連線,而是乙個tcp連線允許多個客戶端請求,可以傳輸多個web物件。同時也可通過配置支援非持久連線。

(3)、http/1.1增加了host欄位,因為目前一台計算機上有多個虛擬主機共享乙個ip位址,請求和相應訊息都應該支援host頭域,且請求訊息中沒有host頭域會報(400 bad request)。此外伺服器應該接受以絕對路徑標記的資源請求。而http/1.0中每台伺服器都繫結乙個唯一的ip,因此,請求訊息中的url沒有傳遞主機名(hostname)。

(4)、增加了新的狀態碼100(continue)。客戶端事先傳送乙個只帶頭域的請求,如果服務因許可權等拒絕請求,就回送相應401(unauthorized)或403;如果伺服器接受此請求就回送相應嗎100,客戶端就可以繼續傳送帶實體的完成請求。狀態碼的使用,在request在傳送body之前,先傳送header試探一下server,如果接受body,再傳送body。可以節省頻寬。

(5)、http/1.0加入了分塊編碼(chunked transfercoding)。傳送方將訊息分割成若干個任意大小的資料塊,每個資料塊在傳送時都會附上塊的長度,最後乙個零長度的塊作為訊息的結束標誌。這種傳送允許傳送方只快取乙個片段,避免快取整個片段帶來的過載。

(6)、http/1.1在http/1.0的基礎上加入了一些cache的新特性,當快取物件age超過expire時變為stale物件,cache不需要直接拋棄stale物件,而是與源伺服器進行重新啟用(revalidation)

(7)、http/2.0支援多路復用技術,同乙個連線併發處理多個請求(nio),http/1.1可以通過建立多個tcp解決。

(8)、http/1.1不支援header資料的壓縮,http/2.0使用hpack演算法對資料壓縮,降體積提速度。

(9)、http/2.0請求伺服器,伺服器推送資料時會額外推送客戶需要的資源,客戶下次呼叫不用請求直接呼叫。提公升速度。

2、tcp三次握手和四次揮手的流程,為什麼斷開連線要4次,如果握手只有兩次,會出現什麼。

1)、tcp三次握手:

第一次握手:建立連線時,客戶端傳送syn(synchronize sequence numbers:同步序列編號)包(sny=1)到伺服器,並進入syn_send(請求連線)狀態,等待伺服器確認;

第二次握手:伺服器接收到syn包,必須確認客戶的syn(ack=j+1)(ack:確認字元,表示發來的資料已確認接收無誤),同時自己也傳送乙個syn包(sny=k),既ack+syn包,此時伺服器進入syn_recv(傳送了ack時的狀態)狀態。

第三次握手:客戶端收到服務端傳送的syn+ack包,向服務端傳送確認包ack(sny+1既ack=k+1),此包傳送完畢,客戶端與伺服器進入established(tcp連線成功)狀態,完成三次握手。

(2)、tcp四次揮手(連線終止協議,性質為終止協議):

第一次揮手:tcp客戶端傳送乙個fin+ack+seq,用來傳輸關閉客戶端到服務端的資料。進入fin_wait1狀態。

第二次揮手:服務端收到fin,被動傳送乙個ack(seq+1),進入close_wait狀態,客戶端收到服務端傳送的ack,進入fin_wait2狀態。

第三次揮手:伺服器關閉客戶端連線,傳送乙個fin給+ack+seq客戶端。進入last_ack狀態。

第四次揮手:客戶端傳送ack(ack=sqe序號+1)報文確認,客戶端進入time_wait狀態,服務端收到ack進入close狀態。

(3)、由於tcp連線時雙工的,因此每個方向都需要單獨進行關閉。這原則是當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向的連線。收到乙個fin只意味著這乙個方向上沒有資料流動,乙個tcp連線到乙個fin後仍能傳送資料。首次執行fin的一方主動關閉,另一方則執行被動關閉。當只握手兩次時,就只會關閉主動發起的一端,另乙個仍能傳送資料。

--------------------- 

面試題(關於tcp)

1 為什麼建立連線協議是三次握手,而關閉連線卻是四次握手呢?這是因為服務端的listen狀態下的socket當收到syn報文的建連請求後,它可以把ack和syn ack起應答作用,而syn起同步作用 放在乙個報文裡來傳送。但關閉連線時,當收到對方的fin報文通知時,它僅僅表示對方沒有資料傳送給你了 ...

TCP經典面試題

1.什麼是三次握手,四次揮手?所謂三次握手是確定連線,四次揮手是關閉連線。三次握手 第一次客戶不知道伺服器是否可以接收資料,所以傳送第一次,當伺服器接收到以後,告訴客戶,我可以接收資料,這是第二次,當客戶接收到後,知道情況後,會再傳送一條確認報文,告訴伺服器,我收到了,就可以進行資料傳輸。四次揮手 ...

HTTP相關面試題

在 osi 七層模型中,http協議位於最頂層的應用層中。通過瀏覽器訪問網頁就直接使用了 http 協議。使用 http 協議時,客戶端首先與服務端的 80 埠建立乙個 tcp 連線,然後在這個連線的基礎上進行請求和應答,以及資料的交換。http 有兩個常用版本,分別是 1.0 和 1.1。主要區別...