軟件測試工程師網絡知識面試題


打開一個網站會發生什么?

1.URL解析
域名解析為IP
編碼
對於一個完整的網址(URL),通常包括傳輸協議、域名、端口、路徑、參數、哈希值等六個部分。比如對於 http://www.baidu.com/index.html?name=mo&age=25#dowell,它可以進行如下划分:

2.DNS查詢
查詢瀏覽器是否有緩存
查詢操作系統是否有緩存
查詢路由器是否有緩存
3.TCP連接
應用層:發送HTTP請求
傳輸層:傳輸報文,http 是基於 tcp 協議,需要進行三次握手。其實傳輸層還有一個協議UDP協議。
三次握手類似打電話:
客戶端:向服務端撥打電話,說:你好,我要跟你談論事情
服務端:好啊,那可以開始了
客戶端:開始說事情

TCP重傳
tcp 的三次握手確保了每一個消息都有去有回。一旦某個消息得不到有效回應 tcp 協議就會重發該消息,直到得到有效回應。
去重
網絡層:將數據打包,尋找傳輸路線
鏈路層:發送數據
建立連接之后,瀏覽器開始向服務器發送 request 請求,請求數據包。請求信息包含一個頭部和一個請求體。請求體告訴了服務器想要的資源是什么。
在 request 請求中,它大致包含以下信息:

GET / HTTP/1.1

Host: google.com

Accept:*/*

Pragma: no-cache

Cache-Control: no-cache

User-Agent:Mozilla/4.04[en](Win95;I;Nav)

GET / 指從服務器上請求一個資源,這個資源的位置是 /。另外,Host: google.com 代表請求的主機名是 google.com。
4.服務器處理
建立連接后,就可以互相傳送數據了。客戶端按照 http 協議的格式將數據組裝好向服務器發起請求,服務器接收到請求並將處理結果響應給瀏覽器。
服務端的 http 服務器軟件一般有 Apache 和 Nginx,Apache 或 Nginx 又將請求交由具體的編程語言(Java、Python、PHP 等)去處理。
服務器又將程序處理的結果按照 http 協議格式原路返回給客戶端。這就是服務器響應,響應分為兩個部分:響應頭和響應主體。其中網頁的代碼包含在響應主體中。
一個 Response 大致包含以下內容:

HTTP/1.0200OK

Date:Mon,31Dec200104:25:57GMT

Server:Apache/1.3.14(Unix)

Content-type:text/html

Last-modified:Tue,17Apr200106:46:28GMT

Etag:"a030f020ac7c01:1e9f"

Content-length:39725426

Content-range:bytes554554-40279979/40279980

斷開連接
在完成了數據通信之后,就要考慮斷開連接了,畢竟任務完成了就要空出系統資源來。tcp 的斷開相對於連接來說,其實是有四次握手的,通常被稱作四次揮手,就是揮手拜拜了。

5.瀏覽器接收
瀏覽器根據狀態碼做不同的事情,
解壓縮
存緩存
解析
6.頁面渲染
瀏覽器將域名通過網絡通信從服務器拿到html文件后:
1.根據html文件構建DOM樹和CSSOM樹。構建DOM樹期間,如果遇到JS,阻塞DOM樹及CSSOM樹的構建,優先加載JS文件,加載完畢,再繼續構建DOM樹及CSSOM樹。
2.構建渲染樹(Render Tree)。
3.頁面的重繪(repaint)與重排(reflow,也有稱回流)。頁面渲染完成后,若JS操作了DOM節點,根據JS對DOM操作動作的大小,瀏覽器對頁面進行重繪或是重排。
參考:https://www.cnblogs.com/chenyoumei/p/9156849.html

瀏覽器收到 Response 后,首先對其進行加載,並根據其中的代碼繼續向服務器請求資源(css、javascript、img 等),加載完成后對頁面進行解析。
解析的過程,其實就是生成解析樹,即Dom樹。Dom樹是由Dom元素及屬性節點組成,加上css解析的樣式對象和js解析后的動作實現。
接下來對Dom樹進行可視化表示,也就是渲染,生成一顆渲染樹。
最后一步就是繪制網頁,瀏覽器根據渲染樹將元素繪制到屏幕上,同時執行js,完成整個頁面的展示。

OSI七層模型和TCP五層模型

OSI七層模型從上到下依次為:
應用層:為應用程序提供網絡服務;
表示層:數據格式轉換、數據壓縮和數據加密;
會話層:建立、斷開和維護通信鏈接;
傳輸層:為上層協議提供端到端的可靠傳輸;
網絡層:尋址和路由;
數據鏈路層:定義通過通信媒介互連的設備之間傳輸的規范;
物理層:利用物理傳輸介質為數據鏈路層提供物理連接。
TCP五層模型相比OSI七層模型,將OSI的應用層、表示層和會話層合為一層:應用層,其他不變。

什么是面向有連接型和面向無連接型?

面向有連接型傳輸包括會話建立、傳輸數據和會話斷開,此外還包括保證傳輸可靠性的各種措施,比如超時重傳、流量控制等,常見的面向有連接傳輸有TCP;
面向無連接型傳輸僅提供基本的傳輸數據的功能,即使接收端不存在,發送端也能發送數據包,常見的面向無連接傳輸有UDP、IP。

UDP和TCP的區別是什么?

UDP和TCP都是傳輸層的協議,用來建立可靠的通信傳輸鏈接的。
UDP僅提供了最基本的數據傳輸功能,至於傳輸時連接的建立和斷開、傳輸可靠性的保證這些UDP統統不關心,而是把這些問題拋給了UDP上層的應用層程序去處理,自己僅提供傳輸層協議的最基本功能。
TCP作為一種面向有連接的協議,只有在確認通信對端存在時才會發送數據,會在傳輸開始前建立連接,傳輸結束后斷開連接,此外,TCP還采取了多種措施保障傳輸的可靠性。
TCP和UDP的區別如下:
TCP是面向有連接型,UDP是面向無連接型;
TCP是一對一傳輸,UDP支持一對一、一對多、多對一和多對多的交互通信;
TCP是面向字節流的,即把應用層傳來的報文看成字節流,將字節流拆分成大小不等的數據塊,並添加TCP首部;UDP是面向報文的,對應用層傳下來的報文不拆分也不合並,僅添加UDP首部;
TCP支持傳輸可靠性的多種措施,包括保證包的傳輸順序、重發機制、流量控制和擁塞控制;UDP僅提供最基本的數據傳輸能力。

TCP對應的應用層協議有哪些?UDP對應的應用層協議有哪些?

TCP對應的典型的應用層協議:
FTP:文件傳輸協議;
SSH:遠程登錄協議;
HTTP:web服務器傳輸超文本到本地瀏覽器的超文本傳輸協議。
UDP對應的典型的應用層協議:
DNS:域名解析協議;
TFTP:簡單文件傳輸協議;
SNMP:簡單網絡管理協議。

什么是http協議?http和https的區別?

http協議是應用層的協議,中文名稱是超文本傳輸協議,是客戶端和服務端相互通信時將信息以http報文的形式傳輸。
https可以簡單的理解為:https = http + 加密 + 認證 + 完整性保護。

http協議的缺點:
通信使用明文,內容可能被竊聽。
通信雙方的身份無法得到認證,身份可能遭遇偽裝。
無法驗證報文的完整性。

針對以上問題,https的改進措施:
加密。https協議通過SSL或者TLS協議將報文內容進行加密,client端進行加密,server端進行解密。
認證。通過值得信賴的第三方機構頒布證書,即可確認通信雙方的身份。客戶端持有證書即可完成客戶端身份的確認,客戶端通信前會查看服務端的證書。
完整性保護。可以通過MD5等散列碼進行通信內容的校驗。

為什么說http協議是無狀態協議?怎么解決Http協議無狀態協議?

http協議是一種無狀態協議,協議自身不對請求和響應之間的通信狀態進行保存,即對發送過來的請求和響應都不做持久化處理,把http協議設計的如此簡單是為了更快地處理大量事務。

為了解決http協議不能保存通信狀態的問題,引入了Cookie狀態管理。Cookie技術通過在請求和響應報文中寫入Cookie信息來控制客戶端的狀態。Cookie會根據從服務端發送的響應報文的一個叫Set-Cookie的首部字段,通知客戶端保存Cookie。當下次客戶端再往該服務端發送請求時,客戶端會自動在請求報文中加入Cookie值發送出去,服務端發現客戶端發來的Cookie后,會檢查是哪一個客戶端發來的連接請求,對比服務器上的記錄,最后得到之前的狀態信息。

URI和URL的區別?

URI: Uniform Resource Identifier,統一資源標識符,用來唯一標識互聯網中的一份資源。
URL: Uniform Resource Locator,統一資源定位符,我們訪問網站的網址就是URL。
URL是URI的子集。
URI的目的就是唯一標識互聯網中的一份資源,具體可以用資源名稱、資源地址等,但是資源地址是目前使用最廣泛的,因此URL就容易和URI混淆。URI相當於抽象類,URL就是這個抽象類的具體實現類。

常見的http動詞有哪些?

GET: 從服務器獲取資源
POST: 在服務器新建資源
PUT: 在服務器更新資源
DELETE: 在服務器刪除資源
HEAD: 獲取資源的元數據
OPTIONAL: 查詢對指定的資源支持的方法

常見的http返回碼有哪些?

200:請求被正常處理
204:請求被受理但沒有資源可以返回
206:客戶端只是請求資源的一部分,服務器只對請求的部分資源執行GET方法,相應報文中通過Content-Range指定范圍的資源。
301:永久性重定向
302:臨時重定向
303:與302狀態碼有相似功能,只是它希望客戶端在請求一個URI的時候,能通過GET方法重定向到另一個URI上
304:發送附帶條件的請求時,條件不滿足時返回,與重定向無關
307:臨時重定向,與302類似,只是強制要求使用POST方法
400:請求報文語法有誤,服務器無法識別
401:請求需要認證
403:請求的對應資源禁止被訪問
404:服務器無法找到對應資源
500:服務器內部錯誤
503:服務器正忙

get和post有什么區別?


❖ http的method字段不同,一個是get,一個是post
❖ post可以附加body,可以⽀持form、json、xml、binary等各種數據格式
❖ ⾏業通⽤的規范
❖ ⽆狀態變化的建議使⽤get請求
❖ 數據的寫⼊與狀態修改建議⽤post

cookie、session的區別

❖ cookie:瀏覽器接受服務器的Set-Cookie指令,並把cookie保存到電腦上,每
個⽹站保存的cookie只作⽤於⾃⼰的⽹站
❖ session:數據存儲到服務端,只把關聯數據的⼀個加密串放到cookie中標記

token、session的區別

❖ token是⼀個⽤戶請求時附帶的請求字段,⽤於驗證⾝份與權限
❖ session可以基於cookie,也可以基於query參數,⽤於關聯⽤戶相關數據
❖ 跨端應⽤的時候,⽐如android原⽣系統不⽀持cookie
❖ 需要⽤token識別⽤戶
❖ 需要⽤把sessionid保存到http請求中的header或者query字段中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM