面試匯總(三):計算機(jī)網(wǎng)絡(luò)常見面試總結(jié)(一)
時間:2023-06-19 01:12:02 | 來源:網(wǎng)站運(yùn)營
時間:2023-06-19 01:12:02 來源:網(wǎng)站運(yùn)營
面試匯總(三):計算機(jī)網(wǎng)絡(luò)常見面試總結(jié)(一):
前言
上一篇文章我們介紹了在面試中數(shù)據(jù)庫常見的面試題。今天我們給大家介紹在面試中,計算機(jī)網(wǎng)絡(luò)常見的面試題。計算機(jī)網(wǎng)絡(luò)在計算機(jī)行業(yè)中是一門最基礎(chǔ)的技術(shù),無論是在開發(fā)項目還是在算法崗,項目的應(yīng)用最終還是落實在用戶的使用,網(wǎng)絡(luò)的連接是至關(guān)重要的,因此,這就要求我們需要對計算機(jī)網(wǎng)絡(luò)有一定的了解。接下來,這篇文章給大家介紹在面試中常見的計算機(jī)網(wǎng)絡(luò)的知識點(diǎn)。當(dāng)然,開發(fā)和算法崗對計算機(jī)網(wǎng)絡(luò)的要求程度不同,相對而言,開發(fā)對計算機(jī)網(wǎng)絡(luò)的要求其實更高一些。但是一些基礎(chǔ)、核心、常見的問題要求我們要掌握。
面試題及參考答案
1、請你說一下TCP怎么保證可靠性,并且簡述一下TCP建立連接和斷開連接的過程
TCP保證可靠性:(1)序列號、確認(rèn)應(yīng)答、超時重傳:數(shù)據(jù)到達(dá)接收方,接收方需要發(fā)出一個確認(rèn)應(yīng)答,表示已經(jīng)收到該數(shù)據(jù)段,并且確認(rèn)序號會說明了它下一次需要接收的數(shù)據(jù)序列號。如果發(fā)送發(fā)遲遲未收到確認(rèn)應(yīng)答,那么可能是發(fā)送的數(shù)據(jù)丟失,也可能是確認(rèn)應(yīng)答丟失,這時發(fā)送方在等待一定時間后會進(jìn)行重傳。這個時間一般是2
RTT(報文段往返時間)+一個偏差值。(2)窗口控制與高速重發(fā)控制/快速重傳(重復(fù)確認(rèn)應(yīng)答):TCP會利用窗口控制來提高傳輸速度,意思是在一個窗口大小內(nèi),不用一定要等到應(yīng)答才能發(fā)送下一段數(shù)據(jù),窗口大小就是無需等待確認(rèn)而可以繼續(xù)發(fā)送數(shù)據(jù)的最大值。如果不使用窗口控制,每一個沒收到確認(rèn)應(yīng)答的數(shù)據(jù)都要重發(fā)。使用窗口控制,如果數(shù)據(jù)段1001-2000丟失,后面數(shù)據(jù)每次傳輸,確認(rèn)應(yīng)答都會不停地發(fā)送序號為1001的應(yīng)答,表示我要接收1001開始的數(shù)據(jù),發(fā)送端如果收到3次相同應(yīng)答,就會立刻進(jìn)行重發(fā);但還有種情況有可能是數(shù)據(jù)都收到了,但是有的應(yīng)答丟失了,這種情況不會進(jìn)行重發(fā),因為發(fā)送端知道,如果是數(shù)據(jù)段丟失,接收端不會放過它的,會瘋狂向它提醒……
(3)擁塞控制:如果把窗口定的很大,發(fā)送端連續(xù)發(fā)送大量的數(shù)據(jù),可能會造成網(wǎng)絡(luò)的擁堵(大家都在用網(wǎng),你在這狂發(fā),吞吐量就那么大,當(dāng)然會堵),甚至造成網(wǎng)絡(luò)的癱瘓。所以TCP在為了防止這種情況而進(jìn)行了擁塞控制。
慢啟動:定義擁塞窗口,一開始將該窗口大小設(shè)為1,之后每次收到確認(rèn)應(yīng)答(經(jīng)過一個rtt),將擁塞窗口大小2。
擁塞避免:設(shè)置慢啟動閾值,一般開始都設(shè)為65536。擁塞避免是指當(dāng)擁塞窗口大小達(dá)到這個閾值,擁塞窗口的值不再指數(shù)上升,而是加法增加(每次確認(rèn)應(yīng)答/每個rtt,擁塞窗口大小+1),以此來避免擁塞。將報文段的超時重傳看做擁塞,則一旦發(fā)生超時重傳,我們需要先將閾值設(shè)為當(dāng)前窗口大小的一半,并且將窗口大小設(shè)為初值1,然后重新進(jìn)入慢啟動過程。
快速重傳:在遇到3次重復(fù)確認(rèn)應(yīng)答(高速重發(fā)控制)時,代表收到了3個報文段,但是這之前的1個段丟失了,便對它進(jìn)行立即重傳。然后,先將閾值設(shè)為當(dāng)前窗口大小的一半,然后將擁塞窗口大小設(shè)為慢啟動閾值+3的大小。這樣可以達(dá)到:
在TCP通信時,網(wǎng)絡(luò)吞吐量呈現(xiàn)逐漸的上升,并且隨著擁堵來降低吞吐量,再進(jìn)入慢慢上升的過程,網(wǎng)絡(luò)不會輕易的發(fā)生癱瘓。TCP建立連接和斷開連接的過程如圖所示:
- Client將標(biāo)志位SYN置為1,隨機(jī)產(chǎn)生一個值seq=J,并將該數(shù)據(jù)包發(fā)送給Server,Client進(jìn)入SYN_SENT狀態(tài),等待Server確認(rèn)。
- Server收到數(shù)據(jù)包后由標(biāo)志位SYN=1知道Client請求建立連接,Server將標(biāo)志位SYN和ACK都置為1,ack=J+1,隨機(jī)產(chǎn)生一個值seq=K,并將該數(shù)據(jù)包發(fā)送給Client以確認(rèn)連接請求,Server進(jìn)入SYN_RCVD狀態(tài)。
- Client收到確認(rèn)后,檢查ack是否為J+1,ACK是否為1,如果正確則將標(biāo)志位ACK置為1,ack=K+1,并將該數(shù)據(jù)包發(fā)送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,Client和Server進(jìn)入ESTABLISHED狀態(tài),完成三次握手,隨后Client與Server之間可以開始傳輸數(shù)據(jù)了。
- 四次揮手:
由于TCP連接時全雙工的,因此,每個方向都必須要單獨(dú)進(jìn)行關(guān)閉,這一原則是當(dāng)一方完成數(shù)據(jù)發(fā)送任務(wù)后,發(fā)送一個FIN來終止這一方向的連接,收到一個FIN只是意味著這一方向上沒有數(shù)據(jù)流動了,即不會再收到數(shù)據(jù)了,但是在這個TCP連接上仍然能夠發(fā)送數(shù)據(jù),直到這一方向也發(fā)送了FIN。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動關(guān)閉,而另一方則執(zhí)行被動關(guān)閉。
1.數(shù)據(jù)傳輸結(jié)束后,客戶端的應(yīng)用進(jìn)程發(fā)出連接釋放報文段,并停止發(fā)送數(shù)據(jù),客戶端進(jìn)入FIN_WAIT_1狀態(tài),此時客戶端依然可以接收服務(wù)器發(fā)送來的數(shù)據(jù)。
2.服務(wù)器接收到FIN后,發(fā)送一個ACK給客戶端,確認(rèn)序號為收到的序號+1,服務(wù)器進(jìn)入CLOSE_WAIT狀態(tài)。客戶端收到后進(jìn)入FIN_WAIT_2狀態(tài)。
3.當(dāng)服務(wù)器沒有數(shù)據(jù)要發(fā)送時,服務(wù)器發(fā)送一個FIN報文,此時服務(wù)器進(jìn)入LAST_ACK狀態(tài),等待客戶端的確認(rèn)
4.客戶端收到服務(wù)器的FIN報文后,給服務(wù)器發(fā)送一個ACK報文,確認(rèn)序列號為收到的序號+1。此時客戶端進(jìn)入TIME_WAIT狀態(tài),等待2MSL(MSL:報文段最大生存時間),然后關(guān)閉連接。
1.1 請你說一說TCP的三次握手和四次揮手的過程及原因- TCP的三次握手過程如下:
C-> SYN -> S
S->SYN/ACK->C
C->ACK->S - TCP的四次揮手過程如下:
C->FIN->S
S->ACK->C
S->FIN->C
C->ACK->S
三次握手的原因: 三次握手可以防止已經(jīng)失效的連接請求報文突然又傳輸?shù)椒?wù)器端導(dǎo)致的服務(wù)器資源浪費(fèi)。例如,客戶端先發(fā)送了一個SYN,但是由于網(wǎng)絡(luò)阻塞,該SYN數(shù)據(jù)包在某個節(jié)點(diǎn)長期滯留。然后客戶端又重傳SYN數(shù)據(jù)包并正確建立TCP連接,然后傳輸完數(shù)據(jù)后關(guān)閉該連接。該連接釋放后失效的SYN數(shù)據(jù)包才到達(dá)服務(wù)器端。在二次握手的前提下,服務(wù)器端會認(rèn)為這是客戶端發(fā)起的又一次請求,然后發(fā)送SYN ,并且在服務(wù)器端創(chuàng)建socket套接字,一直等待客戶端發(fā)送數(shù)據(jù)。但是由于客戶端并沒有發(fā)起新的請求,所以會丟棄服務(wù)端的SYN 。此時服務(wù)器會一直等待客戶端發(fā)送數(shù)據(jù)從而造成資源浪費(fèi)。
四次揮手的原因: 由于連接的關(guān)閉控制權(quán)在應(yīng)用層,所以被動關(guān)閉的一方在接收到FIN包時,TCP協(xié)議棧會直接發(fā)送一個ACK確認(rèn)包,優(yōu)先關(guān)閉一端的通信。然后通知應(yīng)用層,由應(yīng)用層決定什么時候發(fā)送FIN包。應(yīng)用層可以使用系統(tǒng)調(diào)用函數(shù)read==0來判斷對端是否關(guān)閉連接。
1.2 請你說一說TCP擁塞控制?以及達(dá)到什么情況的時候開始減慢增長的速度?擁塞控制是防止過多的數(shù)據(jù)注入網(wǎng)絡(luò),使得網(wǎng)絡(luò)中的路由器或者鏈路過載。流量控制是點(diǎn)對點(diǎn)的通信量控制,而擁塞控制是全局的網(wǎng)絡(luò)流量整體性的控制。發(fā)送雙方都有一個擁塞窗口——cwnd。
1、慢開始: 最開始發(fā)送方的擁塞窗口為1,由小到大逐漸增大發(fā)送窗口和擁塞窗口。每經(jīng)過一個傳輸輪次,擁塞窗口cwnd加倍。當(dāng)cwnd超過慢開始門限,則使用擁塞避免算法,避免cwnd增長過大。
2、擁塞避免: 每經(jīng)過一個往返時間RTT,cwnd就增長1。另外在慢開始和擁塞避免的過程中,一旦發(fā)現(xiàn)網(wǎng)絡(luò)擁塞,就把慢開始門限設(shè)為當(dāng)前值的一半,并且重新設(shè)置cwnd為1,重新慢啟動。(乘法減小,加法增大)
3、快重傳: 接收方每次收到一個失序的報文段后就立即發(fā)出重復(fù)確認(rèn),發(fā)送方只要連續(xù)收到三個重復(fù)確認(rèn)就立即重傳(盡早重傳未被確認(rèn)的報文段)。
4、快恢復(fù): 當(dāng)發(fā)送方連續(xù)收到了三個重復(fù)確認(rèn),就乘法減半(慢開始門限減半),將當(dāng)前的cwnd設(shè)置為慢開始門限,并且采用擁塞避免算法(連續(xù)收到了三個重復(fù)請求,說明當(dāng)前網(wǎng)絡(luò)可能沒有擁塞)。
采用快恢復(fù)算法時,慢開始只在建立連接和網(wǎng)絡(luò)超時才使用。
- 一旦cwnd>慢開始門限,就采用擁塞避免算法,減慢增長速度
- 一旦出現(xiàn)丟包的情況,就重新進(jìn)行慢開始,減慢增長速度
- 一旦cwnd>慢開始門限,就采用擁塞避免算法,減慢增長速度
- 一旦發(fā)送方連續(xù)收到了三個重復(fù)確認(rèn),就采用擁塞避免算法,減慢增長速度
1.3 請問tcp握手為什么兩次不可以?為什么不用四次?- 兩次不可以:
tcp是全雙工通信,兩次握手只能確定單向數(shù)據(jù)鏈路是可以通信的,并不能保證反向的通信正常。 - 不用四次:
本來握手應(yīng)該和揮手一樣都是需要確認(rèn)兩個方向都能聯(lián)通的,本來模型應(yīng)該是:
1.客戶端發(fā)送syn0給服務(wù)器
2.服務(wù)器收到syn0,回復(fù)ack(syn0+1)
3.服務(wù)器發(fā)送syn1
4.客戶端收到syn1,回復(fù)ack(syn1+1)
因為tcp是全雙工的,上邊的四部確認(rèn)了數(shù)據(jù)在兩個方向上都是可以正確到達(dá)的,但是2,3步?jīng)]有沒有上下的聯(lián)系,可以將其合并,加快握手效率,所有就變成了3步握手。
1.4 請你說一下阻塞,非阻塞,同步,異步- 阻塞和非阻塞:調(diào)用者在事件沒有發(fā)生的時候,一直在等待事件發(fā)生,不能去處理別的任務(wù)這是阻塞。調(diào)用者在事件沒有發(fā)生的時候,可以去處理別的任務(wù)這是非阻塞。
- 同步和異步:調(diào)用者必須循環(huán)自去查看事件有沒有發(fā)生,這種情況是同步。調(diào)用者不用自己去查看事件有沒有發(fā)生,而是等待著注冊在事件上的回調(diào)函數(shù)通知自己,這種情況是異步
1.5 請你說一說TCP的流量控制滑動窗口機(jī)制: 滑動窗口協(xié)議的基本原理就是在任意時刻,發(fā)送方都維持了一個連續(xù)的允許發(fā)送的幀的序號,稱為發(fā)送窗口;同時,接收方也維持了一個連續(xù)的允許接收的幀的序號,稱為接收窗口。發(fā)送窗口和接收窗口的序號的上下界不一定要一樣,甚至大小也可以不同。不同的滑動窗口協(xié)議窗口大小一般不同。發(fā)送方窗口內(nèi)的序列號代表了那些已經(jīng)被發(fā)送,但是還沒有被確認(rèn)的幀,或者是那些可以被發(fā)送的幀。
1.6 tcp拆包組裝包是如何實現(xiàn)的拆包 對于拆包目前常用的是以下兩種方式:
1、動態(tài)緩沖區(qū)暫存方式。之所以說緩沖區(qū)是動態(tài)的是因為當(dāng)需要緩沖的數(shù)據(jù)長度超出緩沖區(qū)的長度時會增大緩沖區(qū)長度。
大概過程描述如下: A 為每一個連接動態(tài)分配一個緩沖區(qū),同時把此緩沖區(qū)和 SOCKET 關(guān)聯(lián),常用的是通過結(jié)構(gòu)體關(guān)聯(lián)。
B 當(dāng)接收到數(shù)據(jù)時首先把此段數(shù)據(jù)存放在緩沖區(qū)中。
C 判斷緩存區(qū)中的數(shù)據(jù)長度是否夠一個包頭的長度,如不夠,則不進(jìn)行拆包操作。
D 根據(jù)包頭數(shù)據(jù)解析出里面代表包體長度的變量。
E 判斷緩存區(qū)中除包頭外的數(shù)據(jù)長度是否夠一個包體的長度,如不夠,則不進(jìn)行拆包操作。
F 取出整個數(shù)據(jù)包,這里的"取"的意思是不光從緩沖區(qū)中拷貝出數(shù)據(jù)包,而且要把此數(shù)據(jù)包從緩存區(qū)中刪除掉。刪除的辦法就是把此包后面的數(shù)據(jù)移動到緩沖區(qū)的起始地址。
這種方法有兩個缺點(diǎn):1)為每個連接動態(tài)分配一個緩沖區(qū)增大了內(nèi)存的使用;
2)有三個地方需要拷貝數(shù)據(jù),一個地方是把數(shù)據(jù)存放在緩沖區(qū),一個地方是把完整的數(shù)據(jù)包從緩沖區(qū)取出來,一個地方是把數(shù)據(jù)包從緩沖區(qū)中刪除。這種拆包的改進(jìn)方法會解決和完善部分缺點(diǎn)。
2、利用底層的緩沖區(qū)來進(jìn)行拆包
由于TCP也維護(hù)了一個緩沖區(qū),所以我們完全可以利用TCP的緩沖區(qū)來緩存我們的數(shù)據(jù),這樣一來就不需要為每一個連接分配一個緩沖區(qū)了。另一方面我們知道 recv 或者 wsarecv 都有一個參數(shù),用來表示我們要接收多長長度的數(shù)據(jù)。利用這兩個條件我們就可以對第一種方法進(jìn)行優(yōu)化了。
對于阻塞 SOCKET 來說,我們可以利用一個循環(huán)來接收包頭長度的數(shù)據(jù),然后解析出代表包體長度的那個變量,再用一個循環(huán)來接收包體長度的數(shù)據(jù)。
2、請你說一說TCP的模型,狀態(tài)轉(zhuǎn)移
首先四層TCP/IP模型如下:
其狀態(tài)轉(zhuǎn)移圖如下:
3、請回答一下HTTP和HTTPS的區(qū)別,以及HTTPS有什么缺點(diǎn)?
- HTTP協(xié)議和HTTPS協(xié)議區(qū)別如下:
1)HTTP協(xié)議是以明文的方式在網(wǎng)絡(luò)中傳輸數(shù)據(jù),而HTTPS協(xié)議傳輸?shù)臄?shù)據(jù)則是經(jīng)過TLS加密后的,HTTPS具有更高的安全性
2)HTTPS在TCP三次握手階段之后,還需要進(jìn)行SSL 的handshake,協(xié)商加密使用的對稱加密密鑰
3)HTTPS協(xié)議需要服務(wù)端申請證書,瀏覽器端安裝對應(yīng)的根證書
4)HTTP協(xié)議端口是80,HTTPS協(xié)議端口是443 - HTTPS優(yōu)點(diǎn):
①、HTTPS傳輸數(shù)據(jù)過程中使用密鑰進(jìn)行加密,所以安全性更高
②、HTTPS協(xié)議可以認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的用戶和服務(wù)器 - HTTPS缺點(diǎn):
- HTTPS握手階段延時較高:由于在進(jìn)行HTTP會話之前還需要進(jìn)行SSL握手,因此HTTPS協(xié)議握手階段延時增加
- HTTPS部署成本高:一方面HTTPS協(xié)議需要使用證書來驗證自身的安全性,所以需要購買CA證書;另一方面由于采用HTTPS協(xié)議需要進(jìn)行加解密的計算,占用CPU資源較多,需要的服務(wù)器配置或數(shù)目高
3.1 請你講講HTTP1.1和1.0的區(qū)別主要區(qū)別主要體現(xiàn)在:
緩存處理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires來做為緩存判斷的標(biāo)準(zhǔn),HTTP1.1則引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略。
帶寬優(yōu)化及網(wǎng)絡(luò)連接的使用,HTTP1.0中,存在一些浪費(fèi)帶寬的現(xiàn)象,例如客戶端只是需要某個對象的一部分,而服務(wù)器卻將整個對象送過來了,并且不支持?jǐn)帱c(diǎn)續(xù)傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發(fā)者自由的選擇以便于充分利用帶寬和連接。
錯誤通知的管理,在HTTP1.1中新增了24個錯誤狀態(tài)響應(yīng)碼,如409(Conflict)表示請求的資源與資源的當(dāng)前狀態(tài)發(fā)生沖突;410(Gone)表示服務(wù)器上的某個資源被永久性的刪除。
Host頭處理,在HTTP1.0中認(rèn)為每臺服務(wù)器都綁定一個唯一的IP地址,因此,請求消息中的URL并沒有傳遞主機(jī)名(hostname)。但隨著虛擬主機(jī)技術(shù)的發(fā)展,在一臺物理服務(wù)器上可以存在多個虛擬主機(jī)(Multi-homed Web Servers),并且它們共享一個IP地址。HTTP1.1的請求消息和響應(yīng)消息都應(yīng)支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。
長連接,HTTP 1.1支持長連接(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連接上可以傳送多個HTTP請求和響應(yīng),減少了建立和關(guān)閉連接的消耗和延遲,在HTTP1.1中默認(rèn)開啟Connection: keep-alive,一定程度上彌補(bǔ)了HTTP1.0每次請求都要創(chuàng)建連接的缺點(diǎn)。
4、請你說一說HTTP返回碼
- HTTP協(xié)議的響應(yīng)報文由狀態(tài)行、響應(yīng)頭部和響應(yīng)包體組成,其響應(yīng)狀態(tài)碼總體描述如下:
1xx: 指示信息–表示請求已接收,繼續(xù)處理。
2xx: 成功–表示請求已被成功接收、理解、接受。
3xx: 重定向–要完成請求必須進(jìn)行更進(jìn)一步的操作。
4xx: 客戶端錯誤–請求有語法錯誤或請求無法實現(xiàn)。
5xx: 服務(wù)器端錯誤–服務(wù)器未能實現(xiàn)合法的請求。 - 常見狀態(tài)代碼、狀態(tài)描述的詳細(xì)說明如下。
200 OK: 客戶端請求成功。
206 partial content 服務(wù)器已經(jīng)正確處理部分GET請求,實現(xiàn)斷點(diǎn)續(xù)傳或同時分片下載,該請求必須包含Range請求頭來指示客戶端期望得到的范圍
300 multiple choices(可選重定向): 被請求的資源有一系列可供選擇的反饋信息,由瀏覽器/用戶自行選擇其中一個。
301 moved permanently(永久重定向): 該資源已被永久移動到新位置,將來任何對該資源的訪問都要使用本響應(yīng)返回的若干個URI之一。
302 move temporarily(臨時重定向): 請求的資源現(xiàn)在臨時從不同的URI中獲得,
304:not modified : 如果客戶端發(fā)送一個待條件的GET請求并且該請求以經(jīng)被允許,而文檔內(nèi)容未被改變,則返回304,該響應(yīng)不包含包體(即可直接使用緩存)。304(未修改)自從上次請求后,請求的網(wǎng)頁未修改過。服務(wù)器返回此響應(yīng)時,不會返回網(wǎng)頁內(nèi)容。如果網(wǎng)頁自請求者上次請求后再也沒有更改過,您應(yīng)將服務(wù)器配置為返回此響應(yīng)(稱為 If-Modified-Since HTTP 標(biāo)頭)。服務(wù)器可以告訴 Googlebot 自從上次抓取后網(wǎng)頁沒有變更,進(jìn)而節(jié)省帶寬和開銷。
403 Forbidden: 服務(wù)器收到請求,但是拒絕提供服務(wù)。
t Found: 請求資源不存在,舉個例子:輸入了錯誤的URL。
4.1 請你來說一說HTTP協(xié)議- HTTP協(xié)議: HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬維網(wǎng)(WWW:World Wide Web)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。HTTP是一個基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)(HTML 文件,圖片文件,查詢結(jié)果等)。HTTP是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。它于1990年提出,經(jīng)過幾年的使用與發(fā)展,得到不斷地完善和擴(kuò)展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規(guī)范化工作正在進(jìn)行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經(jīng)提出。HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請求。Web服務(wù)器根據(jù)接收到的請求后,向客戶端發(fā)送響應(yīng)信息。
- HTTP協(xié)議特點(diǎn)
1、簡單快速: 客戶向服務(wù)器請求服務(wù)時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于HTTP協(xié)議簡單,使得HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快。
2、靈活: HTTP允許傳輸任意類型的數(shù)據(jù)對象。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記。
3、無連接: 無連接的含義是限制每次連接只處理一個請求。服務(wù)器處理完客戶的請求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間。
4、無狀態(tài): HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時它的應(yīng)答就較快。
5、支持B/S及C/S模式。
6、默認(rèn)端口80
7、基于TCP協(xié)議 - HTTP過程概述:
HTTP協(xié)議定義Web客戶端如何從Web服務(wù)器請求Web頁面,以及服務(wù)器如何把Web頁面?zhèn)魉徒o客戶端。HTTP協(xié)議采用了請求/響應(yīng)模型??蛻舳讼蚍?wù)器發(fā)送一個請求報文,請求報文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務(wù)器以一個狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議的版本、成功或者錯誤代碼、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。 - HTTP 請求/響應(yīng)的步驟如下:
1、客戶端連接到Web服務(wù)器
2、發(fā)送HTTP請求
3、服務(wù)器接受請求并返回HTTP響應(yīng)
4、釋放連接TCP連接
5、客戶端瀏覽器解析HTML內(nèi)容 - 在瀏覽器地址欄鍵入URL,按下回車之后會經(jīng)歷以下流程:
1、瀏覽器向 DNS 服務(wù)器請求解析該 URL 中的域名所對應(yīng)的 IP 地址;
2、解析出 IP 地址后,根據(jù)該 IP 地址和默認(rèn)端口80,和服務(wù)器建立TCP連接;
3、瀏覽器發(fā)出讀取文件(URL中域名后面部分對應(yīng)的文件)的HTTP 請求,該請求報文作為 TCP 三次握手的第三個報文的數(shù)據(jù)發(fā)送給服務(wù)器;
4、服務(wù)器對瀏覽器請求作出響應(yīng),并把對應(yīng)的 html 文本發(fā)送給瀏覽器;
5、釋放 TCP連接;
6、瀏覽器將該 html 文本并顯示內(nèi)容;
4.2 請你來說一下GET和POST的區(qū)別- 概括
對于GET方式的請求,瀏覽器會把http header和data一并發(fā)送出去,服務(wù)器響應(yīng)200(返回數(shù)據(jù));而對于POST,瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200 ok(返回數(shù)據(jù))。 - 區(qū)別:
1、get參數(shù)通過url傳遞,post放在request body中。
2、get請求在url中傳遞的參數(shù)是有長度限制的,而post沒有。
3、get比post更不安全,因為參數(shù)直接暴露在url中,所以不能用來傳遞敏感信息。
4、get請求只能進(jìn)行url編碼,而post支持多種編碼方式。
5、get請求會瀏覽器主動cache,而post支持多種編碼方式。
6、get請求參數(shù)會被完整保留在瀏覽歷史記錄里,而post中的參數(shù)不會被保留。
7、GET和POST本質(zhì)上就是TCP鏈接,并無差別。但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們在應(yīng)用過程中體現(xiàn)出一些不同。
8、GET產(chǎn)生一個TCP數(shù)據(jù)包;POST產(chǎn)生兩個TCP數(shù)據(jù)包。
4.3 請你說一下HTTP協(xié)議會話結(jié)束標(biāo)志怎么截出來?看tcp連接是否有斷開的四部揮手階段。
4.4 請你說明一下,SSL四次握手的過程- 客戶端發(fā)出請求
首先,客戶端(通常是瀏覽器)先向服務(wù)器發(fā)出加密通信的請求,這被叫做ClientHello請求。 - 服務(wù)器回應(yīng)
服務(wù)器收到客戶端請求后,向客戶端發(fā)出回應(yīng),這叫做SeverHello。 - 客戶端回應(yīng)
客戶端收到服務(wù)器回應(yīng)以后,首先驗證服務(wù)器證書。如果證書不是可信機(jī)構(gòu)頒布、或者證書中的域名與實際域名不一致、或者證書已經(jīng)過期,就會向訪問者顯示一個警告,由其選擇是否還要繼續(xù)通信。 - 服務(wù)器的最后回應(yīng)
服務(wù)器收到客戶端的第三個隨機(jī)數(shù)pre-master key之后,計算生成本次會話所用的"會話密鑰"。然后,向客戶端最后發(fā)送下面信息。
(1)編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送。
(2)服務(wù)器握手結(jié)束通知,表示服務(wù)器的握手階段已經(jīng)結(jié)束。這一項同時也是前面發(fā)送的所有內(nèi)容的hash值,用來供客戶端校驗。
至此,整個握手階段全部結(jié)束。接下來,客戶端與服務(wù)器進(jìn)入加密通信,就完全是使用普通的HTTP協(xié)議,只不過用"會話密鑰"加密內(nèi)容。
4.5 請談一下,你知道的HTTP請求,并說明應(yīng)答碼502和504的區(qū)別OPTIONS:返回服務(wù)器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務(wù)器發(fā)送’*'的請求來測試服務(wù)器的功能性。
HEAD:向服務(wù)器索要與GET請求相一致的響應(yīng),只不過響應(yīng)體將不會被返回。這一方法可以在不必傳輸整個響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)消息頭中的元信息。
GET:向特定的資源發(fā)出請求。
POST:向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。POST請求可能會導(dǎo)致新的資源的創(chuàng)建和/或已有資源的修改。
PUT:向指定資源位置上傳其最新內(nèi)容。
DELETE:請求服務(wù)器刪除Request-URI所標(biāo)識的資源。
TRACE:回顯服務(wù)器收到的請求,主要用于測試或診斷。
CONNECT:HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
雖然HTTP的請求方式有8種,但是我們在實際應(yīng)用中常用的也就是get和post,其他請求方式也都可以通過這兩種方式間接的來實現(xiàn)。
502:作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請求時,從上游服務(wù)器接收到無效的響應(yīng)。
504:作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請求時,未能及時從上游服務(wù)器(URI標(biāo)識出的服務(wù)器,例如HTTP、FTP、LDAP)或者輔助服務(wù)器(例如DNS)收到響應(yīng)。
4.6 請求方法head特性Head只請求頁面的首部,head方法和get方法相同,只不過服務(wù)器響應(yīng)時不會返回消息體,一個head請求的響應(yīng)中,http頭中包含的元信息應(yīng)該和一個get請求的響應(yīng)消息相同,這種方法可以用來獲取請求中隱含的元信息,而不用傳輸實體本身,這個也經(jīng)常用來測試超鏈接的有效性和可用性,
- Head請求有以下特點(diǎn):
1、只請求資源的首部
2、檢查超鏈接的有效性
3、檢查網(wǎng)頁是否被修改
4、用于自動搜索機(jī)器人獲取網(wǎng)頁的標(biāo)志信息,獲取rss種子信息,或者傳遞安全認(rèn)證信息等
4.7 HTTP緩存機(jī)制- HTTP緩存即是瀏覽器第一次想一個服務(wù)器發(fā)起HTTP請求后,服務(wù)器會返回請求的資源,并且在響應(yīng)頭中添加一些有關(guān)緩存的字段如:cache-control,expires,last-modifed,ETag,Date,等,之后瀏覽器再向該服務(wù)器請求資源就可以視情況使用強(qiáng)緩存和協(xié)商緩存,
- 強(qiáng)緩存: 瀏覽器直接從本地緩存中獲取數(shù)據(jù),不與服務(wù)器進(jìn)行交互,
- 協(xié)商緩存: 瀏覽器發(fā)送請求到服務(wù)器,服務(wù)器判斷是否可使用本地緩存
4.8 請你回答一下HTTP用的什么連接?在HTTP/1.0中,默認(rèn)使用的是短連接。也就是說,瀏覽器和服務(wù)器每進(jìn)行一次HTTP操作,就建立一次連接,但任務(wù)結(jié)束就中斷連接。如果客戶端瀏覽器訪問的某個HTML或其他類型的 Web頁中包含有其他的Web資源,如JavaScript文件、圖像文件、CSS文件等;當(dāng)瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話。
但從HTTP/1.1起,默認(rèn)使用長連接,用以保持連接特性。使用長連接的HTTP協(xié)議,會在響應(yīng)頭有加入這行代碼:Connection:keep-alive
在使用長連接的情況下,當(dāng)一個網(wǎng)頁打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的 TCP連接不會關(guān)閉,如果客戶端再次訪問這個服務(wù)器上的網(wǎng)頁,會繼續(xù)使用這一條已經(jīng)建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務(wù)器軟件(如Apache)中設(shè)定這個時間。實現(xiàn)長連接要客戶端和服務(wù)端都支持長連接。
4.9 請你說一說http restREST(Representational State Transfer)一種輕量級的Web Service架構(gòu)??梢酝耆ㄟ^HTTP協(xié)議實現(xiàn)。其實現(xiàn)和操作比SOAP和XML-RPC更為簡潔,還可以利用緩存Cache來提高響應(yīng)速度,性能、效率和易用性上都優(yōu)于SOAP協(xié)議。REST架構(gòu)對資源的操作包括獲取、創(chuàng)建、修改和刪除資源的操作對應(yīng)HTTP協(xié)議提供的GET、POST、PUT和DELETE方法。REST提供了一組架構(gòu)約束,當(dāng)作為一個整體來應(yīng)用時,強(qiáng)調(diào)組件交互的可伸縮性、接口的通用性、組件的獨(dú)立部署、以及用來減少交互延遲、增強(qiáng)安全性、封裝遺留系統(tǒng)的中間組件。
- REST架構(gòu)約束:
1、客戶-服務(wù)器(Client-Server),提供服務(wù)的服務(wù)器和使用服務(wù)的客戶需要被隔離對待,客戶和服務(wù)器之間通過一個統(tǒng)一的接口來互相通訊。
2、無狀態(tài)(Stateless),服務(wù)端并不會保存有關(guān)客戶的任何狀態(tài),客戶端自身負(fù)責(zé)用戶狀態(tài)的維持,并在每次發(fā)送請求時都需要提供足夠的信息。
3、可緩存(Cachable),REST系統(tǒng)需要能夠恰當(dāng)?shù)鼐彺嬲埱?,以盡量減少服務(wù)端和客戶端之間的信息傳輸,以提高性能。
4、分層系統(tǒng)(Layered System),服務(wù)器和客戶之間的通信必須被這樣標(biāo)準(zhǔn)化:允許服務(wù)器和客戶之間的中間層(Ross:代理,網(wǎng)關(guān)等)可以代替服務(wù)器對客戶的請求進(jìn)行回應(yīng),而且這些對客戶來說不需要特別支持。
5、統(tǒng)一接口(Uniform Interface),客戶和服務(wù)器之間通信的方法必須是統(tǒng)一化的。
4.10 請你說一下HTTP的報文段是什么樣的?http請求報文:
- 1、請求方法
GET:請求獲取Request——URL所標(biāo)識的資源
POST:在Request——URL所標(biāo)識的資源后附加資源
HEAD:請求獲取由Request——URL所標(biāo)識的資源的響應(yīng)消息報頭
PUT:請求服務(wù)器存儲一個資源,由Request——URL作為其標(biāo)識
DELETE:請求服務(wù)器刪除由Request——URL所標(biāo)識的資源
TRACE:請求服務(wù)器回送收到的請求信息(用于測試和診斷)
CONNECT:保留
OPTIONS:請求查詢服務(wù)器性能 - 2、URL
URI全名為Uniform Resource Indentifier(統(tǒng)一資源標(biāo)識),用來唯一的標(biāo)識一個資源,是一個通用的概念,URI由兩個主要的子集URL和URN組成。URL全名為Uniform Resource Locator(統(tǒng)一資源定位),通過描述資源的位置來標(biāo)識資源。URN全名為Uniform Resource Name(統(tǒng)一資源命名),通過資源的名字來標(biāo)識資源,與其所處的位置無關(guān),這樣即使資源的位置發(fā)生變動,其URN也不會變化。 - 3、協(xié)議版本
格式為HTTP/主版本號.次版本號,常用為:HTTP/1.1 HTTP/1.0 - 4、請求頭部
Host:接受請求的服務(wù)器地址,可以是IP或者是域名
User-Agent:發(fā)送請求的應(yīng)用名稱
Connection:指定與連接相關(guān)的屬性,例如(Keep_Alive,長連接)
Accept-Charset:通知服務(wù)器端可以發(fā)送的編碼格式
Accept-Encoding:通知服務(wù)器端可以發(fā)送的數(shù)據(jù)壓縮格式
Accept-Language:通知服務(wù)器端可以發(fā)送的語言
4.11 請你說一下https中SSL層原理SSL利用數(shù)據(jù)加密、身份驗證和消息完整性驗證機(jī)制,為網(wǎng)絡(luò)上數(shù)據(jù)的傳輸提供安全性保證。SSL支持各種應(yīng)用層協(xié)議。由于SSL位于應(yīng)用層和傳輸層之間,所以可以為任何基于TCP等可靠連接的應(yīng)用層協(xié)議提供安全性保證。
- 1.身份驗證機(jī)制
SSL利用數(shù)字簽名來驗證通信對端的身份。非對稱密鑰算法可以用來實現(xiàn)數(shù)字簽名。由于通過私鑰加密后的數(shù)據(jù)只能利用對應(yīng)的公鑰進(jìn)行解密,因此根據(jù)解密是否成功,就可以判斷發(fā)送者的身份,如同發(fā)送者對數(shù)據(jù)進(jìn)行了“簽名”。例如,Alice使用自己的私鑰對一段固定的信息加密后發(fā)給Bob,Bob利用Alice的公鑰解密,如果解密結(jié)果與固定信息相同,那么就能夠確認(rèn)信息的發(fā)送者為Alice,這個過程就稱為數(shù)字簽名。使用數(shù)字簽名驗證身份時,需要確保被驗證者的公鑰是真實的,否則,非法用戶可能會冒充被驗證者與驗證者通信。如下圖所示,Cindy冒充Bob,將自己的公鑰發(fā)給Alice,并利用自己的私鑰計算出簽名發(fā)送給Alice,Alice利用“Bob”的公鑰(實際上為Cindy的公鑰)成功驗證該簽名,則Alice認(rèn)為Bob的身份驗證成功,而實際上與Alice通信的是冒充Bob的Cindy。SSL利用PKI提供的機(jī)制保證公鑰的真實性。
- 2.數(shù)據(jù)傳輸?shù)臋C(jī)密性
SSL加密通道上的數(shù)據(jù)加解密使用對稱密鑰算法,目前主要支持的算法有DES、3DES、AES等,這些算法都可以有效地防止交互數(shù)據(jù)被破解。對稱密鑰算法要求解密密鑰和加密密鑰完全一致。因此,利用對稱密鑰算法加密傳輸數(shù)據(jù)之前,需要在通信兩端部署相同的密鑰。 - 3. 消息完整性驗證
為了避免網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)被非法篡改,SSL利用基于MD5或SHA的MAC算法來保證消息的完整性。MAC算法是在密鑰參與下的數(shù)據(jù)摘要算法,能將密鑰和任意長度的數(shù)據(jù)轉(zhuǎn)換為固定長度的數(shù)據(jù)。利用MAC算法驗證消息完整性的過程如下圖所示。發(fā)送者在密鑰的參與下,利用MAC算法計算出消息的MAC值,并將其加在消息之后發(fā)送給接收者。接收者利用同樣的密鑰和MAC算法計算出消息的MAC值,并與接收到的MAC值比較。如果二者相同,則報文沒有改變;否則,報文在傳輸過程中被修改,接收者將丟棄該報文。
MAC算法要求通信雙方具有相同的密鑰,否則MAC值驗證將會失敗。因此,利用MAC算法驗證消息完整性之前,需要在通信兩端部署相同的密鑰。
- 4.利用非對稱密鑰算法保證密鑰本身的安全
對稱密鑰算法和MAC算法要求通信雙方具有相同的密鑰,否則解密或MAC值驗證將失敗。因此,要建立加密通道或驗證消息完整性,必須先在通信雙方部署一致的密鑰。SSL利用非對稱密鑰算法加密密鑰的方法實現(xiàn)密鑰交換,保證第三方無法獲取該密鑰。如下圖所示,SSL客戶端(如Web瀏覽器)利用SSL服務(wù)器(如Web服務(wù)器)的公鑰加密密鑰,將加密后的密鑰發(fā)送給SSL服務(wù)器,只有擁有對應(yīng)私鑰的SSL服務(wù)器才能從密文中獲取原始的密鑰。SSL通常采用RSA算法加密傳輸密鑰。(Server端公鑰加密密鑰,私鑰解密密鑰)
實際上,SSL客戶端發(fā)送給SSL服務(wù)器的密鑰不能直接用來加密數(shù)據(jù)或計算MAC值,該密鑰是用來計算對稱密鑰和MAC密鑰的信息,稱為premaster secret。SSL客戶端和SSL服務(wù)器利用premaster secret計算出相同的主密鑰(master secret),再利用master secret生成用于對稱密鑰算法、MAC算法等的密鑰。premaster secret是計算對稱密鑰、MAC算法密鑰的關(guān)鍵。
5.利用PKI保證公鑰的真實性 PKI通過數(shù)字證書來發(fā)布用戶的公鑰,并提供了驗證公鑰真實性的機(jī)制。數(shù)字證書(簡稱證書)是一個包含用戶的公鑰及其身份信息的文件,證明了用戶與公鑰的關(guān)聯(lián)。數(shù)字證書由權(quán)威機(jī)構(gòu)——CA簽發(fā),并由CA保證數(shù)字證書的真實性。
SSL客戶端把密鑰加密傳遞給SSL服務(wù)器之前,SSL服務(wù)器需要將從CA獲取的證書發(fā)送給SSL客戶端,SSL客戶端通過PKI判斷該證書的真實性。如果該證書確實屬于SSL服務(wù)器,則利用該證書中的公鑰加密密鑰,發(fā)送給SSL服務(wù)器。
驗證SSL服務(wù)器/SSL客戶端的身份之前,SSL服務(wù)器/SSL客戶端需要將從CA獲取的證書發(fā)送給對端,對端通過PKI判斷該證書的真實性。如果該證書確實屬于SSL服務(wù)器/SSL客戶端,則對端利用該證書中的公鑰驗證SSL服務(wù)器/SSL客戶端的身份。
4.12 請你說說HTTP常見頭1、Accept:text/html, application/xhtml+xml, application/xml;q=0.9,
image/webp, image/apng,/; q=0.8 作用:向服務(wù)器申明客戶端(瀏覽器)可以接受的媒體類型(MIME)的資源
解釋:瀏覽器可以接受text/html、application/xhtml+xml、application/xml類型,通配符*/*
表示任意類型的數(shù)據(jù)。并且瀏覽器按照該順序進(jìn)行接收。( text/html —> application/xhtml+xml —>application/xml)
2、Accept-encoding: gzip, deflate, br
作用:向服務(wù)器申明客戶端(瀏覽器)接收的編碼方法,通常為壓縮方法 解釋:瀏覽器支持采用經(jīng)過gzip,deflate 或 br 壓縮過的資源
3、Accept-Language:en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
作用:向服務(wù)器申明客戶端(瀏覽器)接收的語言 解釋:瀏覽器能夠接受en-US, en 和 zh-CN 三種語言,其中 en-US 的權(quán)重最高( q 最高為1,最低為 0),服務(wù)器優(yōu)先返回 en-US 語言 延伸:語言與字符集的區(qū)別:zh-C為漢語,漢語中有許多的編碼:gbk2312 等
4、Cache-control: max-age=0
作用:控制瀏覽器的緩存,常見值為private、no-cache、max-age、alidate,默認(rèn)為
private,根據(jù)瀏覽器查看頁面不同的方式來進(jìn)行區(qū)別 解釋:瀏覽器在訪問了該頁面后,不再會訪問服務(wù)器
5、Cookie:
作用:告訴服務(wù)器關(guān)于Session 的信息,存儲讓服務(wù)器辨識用戶身份的信息。
6、Refer
作用:告訴服務(wù)器該頁面從哪個頁面鏈接的
7、Upgrade-insecure-requests:
作用:申明瀏覽器支持從http 請求自動升級為 https
請求,并且在以后發(fā)送請求的時候都使用 https 解釋:當(dāng)頁面中包含大量的http
資源的時候(圖片、iframe),如果服務(wù)器發(fā)現(xiàn)一旦存在上述的響應(yīng)頭的時候,會在加載 http 資源的時候自動替換為 https 請求
8、User-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132
Safari/537.36 作用:向服務(wù)器發(fā)送瀏覽器的版本、系統(tǒng)、應(yīng)用程序的信息。 解釋:Chrome 瀏覽器的版本信息為
63.0.3239.132,并將自己偽裝成 Safari,使用的是 WebKit 引擎,WebKit偽裝成 KHTML,KHTML偽裝成Gecko(偽裝是為了接收那些為Mozilla、safari、gecko編寫的界面)
延伸:可以隨便填(但不應(yīng)該隨便填)不過一般用于統(tǒng)計。
9、X-Chrome-UMA-Enabled、X-Client-Data :與Chrome 瀏覽器相關(guān)的數(shù)據(jù) Response Headers
4.12 請你說一說http緩存問題,緩存壽命,以及怎么判斷文件在服務(wù)器是否更改的1 緩存的類型:
緩存是一種保存資源副本并在下次請求中直接使用該副本的技術(shù),緩存能夠節(jié)約網(wǎng)絡(luò)資源,提升頁面響應(yīng)速度。常見的緩存類型分為共享緩存和私有緩存
1.1 私有緩存
私有緩存只能用于單獨(dú)用戶,常見的瀏覽器緩存便是私有緩存。私有緩存能夠存儲用戶通過http下載過的文檔,從而在用戶再次訪問時直接提供給用戶,而不用向服務(wù)器發(fā)送請求。
1.2 共享緩存
共享緩存能夠被多個用戶使用,常用的web代理中便使用的共享緩存 緩存壽命 緩存壽命的計算的依據(jù)依次是: 請求頭中的Cache-Control: max-age=N。相應(yīng)的緩存壽命即為 N,從設(shè)置開始,N秒之后過期。
Expires屬性,Expires屬性的值為過期的時間點(diǎn),在這個時間點(diǎn)后,該緩存被認(rèn)為過期
Last-Modified信息。緩存的壽命為頭里面 Date表示的事件點(diǎn)減去 Last-Modified的時間點(diǎn)的結(jié)果乘以 10%
判斷文件是否更改可以看文件時間戳
4.14 http的數(shù)據(jù)段包括什么?http 為什么是無狀態(tài)的,ip地址的abcd類是怎樣分的,ABCD分層協(xié)議為什么如此分層,什么是長連接和短鏈接- http的數(shù)據(jù)段包括什么?
通常http消息包括客戶機(jī)向服務(wù)器請求消息和服務(wù)器向客戶機(jī)的響應(yīng)消息,這兩種類型的消息由一個起始行,一個或多個頭域,一個指示頭域結(jié)束的空行和可選的消息體組成,http的頭域包括通用頭,請求頭,響應(yīng)頭,和實體頭四個部分,每個頭域由一個域名,冒號,和域值三部分組成,域名是大小寫無關(guān)的,域值前可以添加任何數(shù)量的空格符,頭域可以被擴(kuò)張成多行,在每行開始處,使用至少一個空格或制表符。 - http為什么是無狀態(tài)的?
無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力,因為http協(xié)議目的在于支持超文本的傳輸,更加廣義一點(diǎn)就是支持資源的傳輸,那么在客戶端瀏覽器向服務(wù)器發(fā)送請求,繼而服務(wù)器將相應(yīng)的資源發(fā)回客戶這樣一個過程中,無論對于客戶端還是服務(wù)器,都沒有必要記錄這個過程,因為每一次請求和響應(yīng)都是相對獨(dú)立的,一般而言,一個url對應(yīng)唯一的超文本,正因為這樣d唯一性,所以http協(xié)議被設(shè)計為無狀態(tài)的鏈接協(xié)議符合他本身的需求。 - ip地址的abcd類是怎樣分的
A類地址的表示范圍是:0.0.0.0-126.255.255.255,默認(rèn)網(wǎng)絡(luò)掩碼為:255.0.0.0,A類地址分配給規(guī)模特別大的網(wǎng)絡(luò)使用,
B類地址表示范圍是:128.0.0.0-191.255.255.255,默認(rèn)網(wǎng)絡(luò)掩碼為欸:255.255.0.0,B類地址分配給一般的中型網(wǎng)絡(luò)
C類地址的表示范圍是192.0.0.0-223.255.255.255,默認(rèn)網(wǎng)絡(luò)掩碼是:255.255.255.0,C類地址分配給小型網(wǎng)絡(luò),如局域網(wǎng)
D類地址稱為廣播地址,共特殊協(xié)議向選定的節(jié)點(diǎn)發(fā)送信息使用。 - 什么是長連接和短連接?
http1.0中默認(rèn)使用短連接,服務(wù)器和客戶端沒進(jìn)行一次http操作,就建立一次連接,任務(wù)結(jié)束就終端連接,http1.1起。默認(rèn)使用長連接,用以保持連接特性,當(dāng)一個網(wǎng)頁打開完成后,服務(wù)器和客戶端之間用于傳輸http數(shù)據(jù)的tcp連接不會關(guān)閉,客戶端再次訪問這個服務(wù)器時,會繼續(xù)使用這一條已經(jīng)建立好的連接。
總結(jié)
由于計算機(jī)網(wǎng)絡(luò)面試的內(nèi)容較多,因此本文以及接下來的一篇文章的對面試中常見的計算機(jī)網(wǎng)絡(luò)問題進(jìn)行了簡單的總結(jié),一方面是為了方便自己以后面試的復(fù)習(xí),另外也是給大家再次面試相關(guān)崗位的時候提供復(fù)習(xí)方向以及思路解答。這里就需要我們對計算機(jī)網(wǎng)絡(luò)有一個較為深層次的理解。于是,我們在準(zhǔn)備的時候,首先就應(yīng)該夯實基礎(chǔ),只有這樣才能在眾多的面試者中脫穎而出。最后希望大家不斷進(jìn)步,都能盡早拿到自己比較滿意的offer!?。。±^續(xù)加油,未來可期!?。。?br>
關(guān)鍵詞:總結(jié),計算機(jī),匯總,網(wǎng)絡(luò)