一些經(jīng)典的Http面試題
面試常見
一道經(jīng)典的面試題
DNS 解析:將域名解析成 IP 地址
TCP 連接:TCP 三次握手
發(fā)送 HTTP 請求
服務(wù)器處理請求并返回 HTTP 報文
瀏覽器解析渲染頁面
斷開連接:TCP 四次揮手

http 必備基礎(chǔ)知識

超文本就是不單單只是本文,它還可以傳輸圖片、音頻、視頻,甚至點擊文字或圖片能夠進行超鏈接的跳轉(zhuǎn)。
上面這些概念可以統(tǒng)稱為數(shù)據(jù),傳輸就是數(shù)據(jù)需要經(jīng)過一系列的物理介質(zhì)從一個端系統(tǒng)傳送到另外一個端系統(tǒng)的過程。通常我們把傳輸數(shù)據(jù)包的一方稱為請求方,把接到二進制數(shù)據(jù)包的一方稱為應(yīng)答方。
而協(xié)議指的就是是網(wǎng)絡(luò)中(包括互聯(lián)網(wǎng))傳遞、管理信息的一些規(guī)范。如同人與人之間相互交流是需要遵循一定的規(guī)矩一樣,計算機之間的相互通信需要共同遵守一定的規(guī)則,這些規(guī)則就稱為協(xié)議,只不過是網(wǎng)絡(luò)協(xié)議。
什么是無狀態(tài)協(xié)議,HTTP 是無狀態(tài)協(xié)議嗎,怎么解決
如果你的瀏覽器允許 cookie 的話,查看方式 chrome://settings/content/cookies
幾種方法
GET: 通常用于請求服務(wù)器發(fā)送某些資源
HEAD: 請求資源的頭部信息, 并且這些頭部與 HTTP GET 方法請求時返回的一致. 該請求方法的一個使用場景是在下載一個大文件前先獲取其大小再決定是否要下載, 以此可以節(jié)約帶寬資源
OPTIONS: 用于獲取目的資源所支持的通信選項
POST: 發(fā)送數(shù)據(jù)給服務(wù)器,是非冪等的
PUT: 跟POST方法很像,也是想服務(wù)器提交數(shù)據(jù)。但是,它們之間有不同。PUT指定了資源在服務(wù)器上的位置,而POST不需要置頂資源在服務(wù)器的位置,是冪等的
DELETE: 用于刪除指定的資源
PATCH: 用于對資源進行部分修改
CONNECT: HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器
TRACE: 回顯服務(wù)器收到的請求,主要用于測試或診斷
http get 和 post 區(qū)別
http put 和 post 區(qū)別
1PUT?https://gdutxiao.github.io/2018/04/16/http-put-vs-post?HTTP/1.1
2
3{
4????/*?文章內(nèi)容正文?*/
5}
1POST?https://gdutxiao.github.io/post-article?HTTP/1.1
2
3{
4????/*?文章內(nèi)容正文?*/
5}
現(xiàn)在問題來了,如果真的遇到了網(wǎng)絡(luò)故障,客戶端應(yīng)該如何重試 POST 請求呢?解決方法其實很簡單,我們可以在 POST 請求中隱藏一個唯一的 token,服務(wù)端在處理請求后把 token 存入數(shù)據(jù)庫,如果這個 token 之前遇到過,服務(wù)端就知道這是重復(fù)的 POST 請求,可以不再處理了。
http 版本
1.0 與 1.1
http1.0一次只能處理一個請求,不能同時收發(fā)數(shù)據(jù)
http1.1可以處理多個請求,能同時收發(fā)數(shù)據(jù)
http1.1增加可更多字段,如cache-control,keep-alive.
2.0
http 2.0采用二進制的格式傳送數(shù)據(jù),不再使用文本格式傳送數(shù)據(jù)
http2.0對消息頭采用hpack壓縮算法,http1.x的版本消息頭帶有大量的冗余消息
http2.0 采用多路復(fù)用,即用一個tcp連接處理所有的請求,真正意義上做到了并發(fā)請求,流還支持優(yōu)先級和流量控制(HTTP/1.x 雖然通過 pipeline也能并發(fā)請求,但是多個請求之間的響應(yīng)會被阻塞的,所以 pipeline 至今也沒有被普及應(yīng)用,而 HTTP/2 做到了真正的并發(fā)請求。同時,流還支持優(yōu)先級和流量控制。)
http2.0支持server push,服務(wù)端可以主動把css,jsp文件主動推送到客戶端,不需要客戶端解析HTML,再發(fā)送請求,當客戶端需要的時候,它已經(jīng)在客戶端了。
。HTTP/2的缺點主要有以下幾點:
TCP 以及 TCP+TLS建立連接的延時
這樣就需要有兩個握手延遲過程?:
TCP的隊頭阻塞并沒有徹底解決
了。因為TCP為了保證可靠傳輸,有個特別的“丟包重傳”機制,丟失的包必須要等待重新傳輸確認,HTTP/2出現(xiàn)丟包時,整個 TCP
都要開始等待重傳,那么就會阻塞該TCP連接中的所有請求(如下圖)。而對于 HTTP/1.1 來說,可以開啟多個 TCP
連接,出現(xiàn)這種情況反到只會影響其中一個連接,剩余的 TCP 連接還可以正常傳輸數(shù)據(jù)。

Http 3.0
而這個“HTTP over QUIC”就是HTTP協(xié)議的下一個大版本,HTTP/3。它在HTTP/2的基礎(chǔ)上又實現(xiàn)了質(zhì)的飛躍,真正“完美”地解決了“隊頭阻塞”問題。

QUIC新功能
實現(xiàn)了類似TCP的流量控制、傳輸可靠性的功能。
實現(xiàn)了快速握手功能。
0RTT 建連可以說是 QUIC 相比 HTTP2 最大的性能優(yōu)勢?。
集成了TLS加密功能。
多路復(fù)用,徹底解決TCP中隊頭阻塞的問題

總結(jié)
HTTP/1.1有兩個主要的缺點:安全不足和性能不高。
HTTP/2完全兼容HTTP/1,是“更安全的HTTP、更快的HTTPS",頭部壓縮、多路復(fù)用等技術(shù)可以充分利用帶寬,降低延遲,從而大幅度提高上網(wǎng)體驗;
QUIC 基于 UDP 實現(xiàn),是 HTTP/3 中的底層支撐協(xié)議,該協(xié)議基于 UDP,又取了 TCP 中的精華,實現(xiàn)了即快又可靠的協(xié)議
更多閱讀
·END·
如有收獲,請劃至底部,點擊“在看”,謝謝!

歡迎長按下圖關(guān)注公眾號
