前端面試寶典之HTTP篇
http狀態碼有那些?分別代表是什麼意思?
簡單版
100 Continue 繼續,一般在傳送post請求時,已傳送了http header之後服務端將返回此資訊,表示確認,之後傳送具體引數資訊
200 OK 正常返回資訊
201 Created 請求成功並且伺服器建立了新的資源
202 Accepted 伺服器已接受請求,但尚未處理
301 Moved Permanently 請求的網頁已永久移動到新位置。
302 Found 臨時性重定向。
303 See Other 臨時性重定向,且總是使用 GET 請求新的 URI。
304 Not Modified 自從上次請求後,請求的網頁未修改過。
400 Bad Request 伺服器無法理解請求的格式,客戶端不應當嘗試再次使用相同的內容發起請求。
401 Unauthorized 請求未授權。
403 Forbidden 禁止訪問。
404 Not Found 找不到如何與 URI 相匹配的資源。
500 Internal Server Error 最常見的伺服器端錯誤。
503 Service Unavailable 伺服器端暫時無法處理請求(可能是過載或維護)。
一個頁面從輸入 URL 到頁面載入顯示完成,這個過程中都發生了什麼?(流程說的越詳細越好)
-
注:這題勝在區分度高,知識點覆蓋廣,再不懂的人,也能答出幾句,
-
而高手可以根據自己擅長的領域自由發揮,從URL規範、HTTP協議、DNS、CDN、資料庫查詢、
-
到瀏覽器流式解析、CSS規則構建、layout、paint、onload/domready、JS執行、JS API繫結等等;
-
詳細版:
-
瀏覽器會開啟一個執行緒來處理這個請求,對 URL 分析判斷如果是 http 協議就按照 Web 方式來處理;
-
呼叫瀏覽器核心中的對應方法,比如 WebView 中的 loadUrl 方法;
-
通過DNS解析獲取網址的IP地址,設定 UA 等資訊發出第二個GET請求;
-
進行HTTP協議會話,客戶端傳送報頭(請求報頭);
-
進入到web伺服器上的 Web Server,如 Apache、Tomcat、Node.JS 等伺服器;
-
進入部署好的後端應用,如 PHP、Java、JavaScript、Python 等,找到對應的請求處理;
-
處理結束回饋報頭,此處如果瀏覽器訪問過,快取上有對應資源,會與伺服器最後修改時間對比,一致則返回304;
-
瀏覽器開始下載html文件(響應報頭,狀態碼200),同時使用快取;
-
文件樹建立,根據標記請求所需指定MIME型別的檔案(比如css、js),同時設定了cookie;
-
頁面開始渲染DOM,JS根據DOM API操作DOM,執行事件繫結等,頁面顯示完成。
-
-
簡潔版:
-
瀏覽器根據請求的URL交給DNS域名解析,找到真實IP,向伺服器發起請求;
-
伺服器交給後臺處理完成後返回資料,瀏覽器接收檔案(HTML、JS、CSS、圖象等);
-
瀏覽器對載入到的資源(HTML、JS、CSS等)進行語法解析,建立相應的內部資料結構(如HTML的DOM);
-
載入解析到的資原始檔,渲染頁面,完成。
-
說說TCP傳輸的三次握手四次揮手策略
-
為了準確無誤地把資料送達目標處,TCP協議採用了三次握手策略。用TCP協議把資料包送出去後,TCP不會對傳送 後的情況置之不理,它一定會向對方確認是否成功送達。握手過程中使用了TCP的標誌:SYN和ACK
-
傳送端首先發送一個帶SYN標誌的資料包給對方。接收端收到後,回傳一個帶有SYN/ACK標誌的資料包以示傳達確認資訊。 最後,傳送端再回傳一個帶ACK標誌的資料包,代表“握手”結束。 若在握手過程中某個階段莫名中斷,TCP協議會再次以相同的順序傳送相同的資料包
斷開一個TCP連線則需要“四次握手”:
-
第一次揮手:主動關閉方傳送一個FIN,用來關閉主動方到被動關閉方的資料傳送,也就是主動關閉方告訴被動關閉方:我已經不 會再給你發資料了(當然,在fin包之前傳送出去的資料,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些資料),但是,此時主動關閉方還可 以接受資料
-
第二次揮手:被動關閉方收到FIN包後,傳送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號)
-
第三次揮手:被動關閉方傳送一個FIN,用來關閉被動關閉方到主動關閉方的資料傳送,也就是告訴主動關閉方,我的資料也傳送完了,不會再給你發資料了
-
第四次揮手:主動關閉方收到FIN後,傳送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手
TCP和UDP的區別
-
TCP(Transmission Control Protocol,傳輸控制協議)是基於連線的協議,也就是說,在正式收發資料前,必須和對方建立可靠的連線。一個TCP連線必須要經過三次“對話”才能建立起來
-
UDP(User Data Protocol,使用者資料報協議)是與TCP相對應的協議。它是面向非連線的協議,它不與對方建立連線,而是直接就把資料包傳送過去! UDP適用於一次只傳送少量資料、對可靠性要求不高的應用環境
HTTP和HTTPS
-
HTTP協議通常承載於TCP協議之上,在HTTP和TCP之間新增一個安全協議層(SSL或TSL),這個時候,就成了我們常說的HTTPS
-
預設HTTP的埠號為80,HTTPS的埠號為443
為什麼HTTPS安全
-
因為網路請求需要中間有很多的伺服器路由器的轉發。中間的節點都可能篡改資訊,而如果使用HTTPS,金鑰在你和終點站才有。https之所以比http安全,是因為他利用ssl/tls協議傳輸。它包含證書,解除安裝,流量轉發,負載均衡,頁面適配,瀏覽器適配,refer傳遞等。保障了傳輸過程的安全性
關於Http 2.0 你知道多少?
-
HTTP/2引入了“服務端推(server push)”的概念,它允許服務端在客戶端需要資料之前就主動地將資料傳送到客戶端快取中,從而提高效能。
-
HTTP/2提供更多的加密支援
-
HTTP/2使用多路技術,允許多個訊息在一個連線上同時交差。
-
它增加了頭壓縮(header compression),因此即使非常小的請求,其請求和響應的header都只會佔用很小比例的頻寬
GET和POST的區別,何時使用POST?
-
GET:一般用於資訊獲取,使用URL傳遞引數,對所傳送資訊的數量也有限制,一般在2000個字元
-
POST:一般用於修改伺服器上的資源,對所傳送的資訊沒有限制。
-
GET方式需要使用Request.QueryString來取得變數的值,而POST方式通過Request.Form來獲取變數的值,也就是說Get是通過位址列來傳值,而Post是通過提交表單來傳值。
-
然而,在以下情況中,請使用 POST 請求:
-
無法使用快取檔案(更新伺服器上的檔案或資料庫)
-
向伺服器傳送大量資料(POST 沒有資料量限制)
-
傳送包含未知字元的使用者輸入時,POST 比 GET 更穩定也更可靠
-
說說網路分層裡七層模型是哪七層
-
應用層:應用層、表示層、會話層(從上往下)(HTTP、FTP、SMTP、DNS)
-
傳輸層(TCP和UDP)
-
網路層(IP)
-
物理和資料鏈路層(乙太網)
-
每一層的作用如下:
-
物理層:通過媒介傳輸位元,確定機械及電氣規範(位元Bit) 資料鏈路層:將位元組裝成幀和點到點的傳遞(幀Frame)
-
網路層:負責資料包從源到宿的傳遞和網際互連(包PackeT)
-
傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(段Segment)
-
會話層:建立、管理和終止會話(會話協議資料單元SPDU)
-
表示層:對資料進行翻譯、加密和壓縮(表示協議資料單元PPDU)
-
應用層:允許訪問OSI環境的手段(應用協議資料單元APDU)
-
講講304快取的原理
-
伺服器首先產生ETag,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該記號傳回伺服器要求伺服器驗證其(客戶端)快取
-
304是HTTP狀態碼,伺服器用來標識這個檔案沒修改,不返回內容,瀏覽器在接收到個狀態碼後,會使用瀏覽器已快取的檔案
-
客戶端請求一個頁面(A)。 伺服器返回頁面A,並在給A加上一個ETag。 客戶端展現該頁面,並將頁面連同ETag一起快取。 客戶再次請求頁面A,並將上次請求時伺服器返回的ETag一起傳遞給伺服器。 伺服器檢查該ETag,並判斷出該頁面自上次客戶端請求之後還未被修改,直接返回響應304(未修改——Not Modified)和一個空的響應體
HTTP/2 與 HTTP/1.x 的關鍵區別
-
二進位制協議代替文字協議,更加簡潔高效
-
針對每個域只使用一個多路複用的連線
-
壓縮頭部資訊減小開銷
-
允許伺服器主動推送應答到客戶端的快取中
一個頁面從輸入 URL 到頁面載入顯示完成,這個過程中都發生了什麼?
-
01.瀏覽器查詢域名對應的IP地址(DNS 查詢:瀏覽器快取->系統快取->路由器快取->ISP DNS 快取->根域名伺服器)
-
02.瀏覽器向 Web 伺服器傳送一個 HTTP 請求(TCP三次握手)
-
03.伺服器 301 重定向(從 http://example.com 重定向到 http://www.example.com)
-
04.瀏覽器跟蹤重定向地址,請求另一個帶 www 的網址
-
05.伺服器處理請求(通過路由讀取資源)
-
06.伺服器返回一個 HTTP 響應(報頭中把 Content-type 設定為 'text/html')
-
07.瀏覽器進 DOM 樹構建
-
08.瀏覽器傳送請求獲取嵌在 HTML 中的資源(如圖片、音訊、視訊、CSS、JS等)
-
09.瀏覽器顯示完成頁面
-
10.瀏覽器傳送非同步請求