校招HTTP面試常見問題彙集(詳解)

你好!我是辰兮同學,很高興你點進來閱讀,本篇總常見的Http面試問題,以及傳述了一些基本的概念。
部分題目我寫了詳細的文章放有鏈接可深入探討,共同成長,一起進步 !



一、HTTP和HTTPS的基本概念

HTTP(HyperText Transfer Protocol 超文本傳輸協議)是互聯網上應用最爲廣泛的一種網絡協議,是一個客戶端和服務器端請求和應答的標準(TCP),用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網絡傳輸減少。

HTTPS全稱:Hyper Text Transfer Protocol over SecureSocket Layer是以安全爲目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。

HTTPS協議的主要作用可以分爲兩種
①一種是建立一個信息安全通道,來保證數據傳輸的安全;②另一種就是確認網站的真實性。

拓展小結:HTTPS是HTTP協議的修改,它加密數據並確保其機密性。其配置可保護用戶在與網站交互時免於竊取個人信息和計費數據。


二、簡述HTTP協議的主要特點

總結:簡單快速、靈活、無連接、無狀態

①簡單快速:每個資源(比如圖片、頁面)都通過 url 來定位。這都是固定的,在http協議中,處理起來也比較簡單,想訪問什麼資源,直接輸入url即可。

②靈活:http協議的頭部有一個數據類型,通過http協議,就可以完成不同數據類型的傳輸。

在這裏插入圖片描述
在這裏插入圖片描述

③無連接:連接一次,就會斷開,不會繼續保持連接。

④無狀態:客戶端和服務器端是兩種身份。第一次請求結束後,就斷開了,第二次請求時,服務器端並沒有記住之前的狀態,也就是說,服務器端無法區分客戶端是否爲同一個人、同一個身份。

ps:有的時候,我們訪問網站時,網站能記住我們的賬號,這個是通過其他的手段(比如 session)做到的,並不是http協議能做到的。


三、HTTPS和HTTP的區別:

總結:安全性好就會導致收費加不同的連接方式

1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。是否免費

2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。傳輸安全問題

3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。連接方式不同+端口不同

4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。連接方式


四、HTTP協議是無狀態的和Connection: keep-alive的區別

無狀態是指協議對於事務處理沒有記憶能力

HTTP無狀態無狀態是指協議對於事務處理沒有記憶能力,服務器不知道客戶端是什麼狀態。從另一方面講,打開一個服務器上的網頁和你之前打開這個服務器上的網頁之間沒有任何聯繫。

ps:如果你要實現一個購物車,需要藉助於Cookie或Session或服務器端API(如NSAPI and ISAPI)記錄這些信息,請求服務器結算頁面時同時將這些信息提交到服務器。當你登錄到一個網站時,你的登錄狀態也是由Cookie或Session來“記憶”的,因爲服務器並不知道你是否登錄。

從HTTP/1.1起,默認都開啓了Keep-Alive,保持連接特性,簡單地說,當一個網頁打開完成後,客戶端和服務器之間用於傳輸HTTP數據的TCP連接不會關閉

如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache、GlassFish)中設定這個時間。


四、三次握手和四次揮手

在這裏插入圖片描述
請參考:我終於搞懂了TCP的三次握手和四次揮手


五、HTTPS的工作原理

HTTPS (全稱:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全爲目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性 。HTTPS 在HTTP 的基礎下加入SSL 層,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL。

詳細圖解

在這裏插入圖片描述

  • 第一步:客戶使用https的URL訪問Web服務器,要求與Web服務器建立SSL連接
  • 第二步:Web服務器收到客戶端請求後,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。
  • 第三步:客戶端的瀏覽器與Web服務器開始協商SSL連接的安全等級,也就是信息加密的等級。
  • 第四步:客戶端的瀏覽器根據雙方同意的安全等級,建立會話密鑰,然後利用網站的公鑰將會話密鑰加密,並傳送給網站。
  • 第五步:Web服務器利用自己的私鑰解密出會話密鑰
  • 第六步:Web服務器利用會話密鑰加密與客戶端之間的通信

六、一次完整的HTTP請求所經歷的7個步驟

總結:建立TCP連接->發送請求行->發送請求頭->(到達服務器)發送狀態行->發送響應頭->發送響應數據->斷TCP連接

HTTP通信機制是在一次完整的HTTP通信過程中,Web瀏覽器與Web服務器之間將完成下列7個步驟:

1、 建立TCP連接

在HTTP工作開始之前,Web瀏覽器首先要通過網絡與Web服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共同構建 Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則, 只有低層協議建立之後才能,才能進行更層協議的連接,因此,首先要建立TCP連接,一般TCP連接的端口號是80。

2、 Web瀏覽器向Web服務器發送請求行

一旦建立了TCP連接,Web瀏覽器就會向Web服務器發送請求命令。例如:GET /sample/hello.jsp HTTP/1.1。

3、 Web瀏覽器發送請求頭

瀏覽器發送其請求命令之後,還要以頭信息的形式向Web服務器發送一些別的信息,之後瀏覽器發送了一空白行來通知服務器,它已經結束了該頭信息的發送。

4、Web服務器應答

客戶機向服務器發出請求後,服務器會客戶機回送應答, HTTP/1.1 200 OK ,應答的第一部分是協議的版本號和應答狀態碼。

5.Web服務器發送應答頭

正如客戶端會隨同請求發送關於自身的信息一樣,服務器也會隨同應答向用戶發送關於它自己的數據及被請求的文檔。

6、Web服務器向瀏覽器發送數據

Web服務器向瀏覽器發送頭信息後,它會發送一個空白行來表示頭信息的發送到此爲結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據。

7、Web服務器關閉TCP連接

一般情況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP連接,然後如果瀏覽器或者服務器在其頭信息加入了這行代碼:

Connection:keep-alive

TCP連接在發送後將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了爲每個請求建立新連接所需的時間,還節約了網絡帶寬。


七、如何解決Http協議無狀態協議

無狀態協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息

解決辦法:1,通過cookie解決,2,通過session會話保存。

也就是說,當客戶端一次HTTP請求完成以後,客戶端再發送一次HTTP請求,HTTP並不知道當前客戶端是一個"老用戶"。

Cookie:可以使用Cookie來解決無狀態的問題,Cookie就相當於一個通行證,第一次訪問的時候給客戶端發送一個Cookie,當客戶端再次來的時候,拿着Cookie(通行證),那麼服務器就知道這個是"老用戶"。

Session:第一步當然是創建Session了。在Java中是通過調用HttpServletRequest的getSession方法(使用true作爲參數)創建的。在創建了Session的同時,服務器會爲該Session生成唯一的Session id,而這個Session id在隨後的請求中會被用來重新獲得已經創建的Session;在Session被創建之後,就可以調用Session相關的方法往Session中增加內容了,而這些內容只會保存在服務器中,發到客戶端的只有Session id;當客戶端再次發送請求的時候,會將這個Session id帶上,服務器接受到請求之後就會依據Session id找到相應的Session,從而再次使用之。正式這樣一個過程,用戶的狀態也就得以保持了。


八、HTTP請求報文與響應報文

請參考:HTTP報文之"請求報文"和"響應報文"詳解

在這裏插入圖片描述

  • 請求報文

在這裏插入圖片描述

  • 響應報文

在這裏插入圖片描述


九、Get和Post方法詳解

在這裏插入圖片描述
請參考:Get和Post面試總結


十、HTTP協議與TCP/IP協議的關係

HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。HTTP屬於應用層協議,在傳輸層使用TCP協議,在網絡層使用IP協議。IP協議主要解決網絡路由和尋址問題,TCP協議主要解決如何在IP層之上可靠的傳遞數據包,使在網絡上的另一端收到發端發出的所有包,並且順序與發出順序一致。TCP有可靠,面向連接的特點。

在這裏插入圖片描述
TCP/IP 是所有協議的總稱,分爲應用層、網絡層、傳輸層和鏈路層。


十一、什麼是長連接、短連接 ?

HTTP的長連接和短連接本質上是TCP長連接和短連接。

1、在HTTP/1.0中,默認使用的是短連接。也就是說,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。如果客戶端瀏覽器訪問的某個HTML或其他類型的 Web頁中包含有其他的Web資源,如JavaScript文件、圖像文件、CSS文件等;當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話。

2、但從 HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭有加入這行代碼:

Connection:keep-alive
在使用長連接的情況下,當一個網頁打開完成後,客戶端和服務器之間用於傳輸HTTP數據的 TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接要客戶端和服務端都支持長連接。


十二、TCP短連接和長連接

TCP短連接 模擬一種TCP短連接的情況:

  • client 向 server 發起連接請求
  • server 接到請求,雙方建立連接
  • client 向 server 發送消息
  • server 迴應 client
  • 一次讀寫完成,此時雙方任何一個都可以發起 close 操作

在步驟5中,一般都是 client 先發起 close 操作。當然也不排除有特殊的情況。

從上面的描述看,短連接一般只會在 client/server 間傳遞一次讀寫操作!

小結:建立連接——數據傳輸——關閉連接…建立連接——數據傳輸——關閉連接

在這裏插入圖片描述

短連接的優點是:管理起來比較簡單,存在的連接都是有用的連接,不需要額外的控制手段。


TCP長連接 再模擬一種長連接的情況:

  • client 向 server 發起連接
  • server 接到請求,雙方建立連接
  • client 向 server 發送消息
  • server 迴應 client
  • 一次讀寫完成,連接不關閉
  • 後續讀寫操作…
  • 長時間操作之後client發起關閉請求
    在這裏插入圖片描述

小結:建立連接——數據傳輸…(保持連接)…數據傳輸——關閉連接


I hope this article can help you grow and progress together.
在這裏插入圖片描述
2020.04.29 記錄辰兮的第60篇博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章