天天看點

HTTP常見面試題

Http與Https的差別:

  1. HTTP 的URL 以http:// 開頭,而HTTPS 的URL 以https:// 開頭
  2. HTTP 是不安全的,而 HTTPS 是安全的
  3. HTTP 标準端口是80 ,而 HTTPS 的标準端口是443
  4. 在OSI 網絡模型中,HTTP工作于應用層,而HTTPS 的安全傳輸機制工作在傳輸層
  5. HTTP 無法加密,而HTTPS 對傳輸的資料進行加密
  6. HTTP無需證書,而HTTPS 需要CA機構wosign的頒發的SSL證書

什麼是SSL證書?

SSL 證書提供了一種在網際網路上身份驗證的方式,是用來辨別和證明通信雙方身份的數字資訊檔案。使用SSL 證書的網站,可以保證使用者和伺服器間資訊交換的保密性,具有不可竊聽、不可更改、不可否認、不可冒充的功能。

OSI七層:

實體層、資料鍊路層、網絡層、傳輸層、會話層、表示層、應用層

TCP/IP:

接口層、網絡層、傳輸層、應用層

是Http協定無狀态協定?怎麼解決Http協定無狀态協定?

  • 無狀态協定對于事務處理沒有記憶能力。缺少狀态意味着如果後續處理需要前面的資訊就無法完成。也就是說,當用戶端一次HTTP請求完成以後,用戶端再發送一次HTTP請求,HTTP并不知道目前用戶端是一個”老使用者“。
  • 可以使用Cookie來解決無狀态的問題,Cookie就相當于一個通行證,第一次通路的時候給用戶端發送一個Cookie,當用戶端再次來的時候,拿着Cookie(通行證),那麼伺服器就知道這個是”老使用者“。

URI和URL的差別

URI

URI,是uniform resource identifier,統一資源辨別符,用來唯一的辨別一個資源。Web上可用的每種資源如HTML文檔、圖像、視訊片段、程式等都是一個來URI來定位的。URI一般由三部組成:

  • 通路資源的命名機制
  • 存放資源的主機名
  • 資源自身的名稱,由路徑表示,着重強調于資源。

URL

URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來辨別一個資源,而且還指明了如何locate這個資源。URL是Internet上用來描述資訊資源的字元串,主要用在各種WWW客戶程式和伺服器程式上,特别是著名的Mosaic。采用URL可以用一種統一的格式來描述各種資訊資源,包括檔案、伺服器的位址和目錄等。URL一般由三部組成:

  • 協定(或稱為服務方式)
  • 存有該資源的主機IP位址(有時也包括端口号)
  • 主機資源的具體位址。如目錄和檔案名等

總結

在Java的URI中,一個URI執行個體可以代表絕對的,也可以是相對的,隻要它符合URI的文法規則。而URL類則不僅符合語義,還包含了定位該資源的資訊,是以它不能是相對的。URI标記了一個網絡資源,僅此而已; URL标記了一個WWW網際網路資源(用位址标記),并給出了他的通路位址。

HTTPS工作原理

一、首先HTTP請求服務端生成證書,用戶端對證書的有效期、合法性、域名是否與請求的域名一緻、證書的公鑰(RSA加密)等進行校驗;

二、用戶端如果校驗通過後,就根據證書的公鑰的有效, 生成随機數,随機數使用公鑰進行加密(RSA加密);

三、消息體産生的後,對它的摘要進行MD5(或者SHA1)算法加密,此時就得到了RSA簽名;

四、發送給服務端,此時隻有服務端(RSA私鑰)能解密。

五、解密得到的随機數,再用AES加密,作為密鑰(此時的密鑰隻有用戶端和服務端知道)。

HTTP常見面試題

一次完整的HTTP請求所經曆的7個步驟

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

建立TCP連接配接

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

Web浏覽器向Web伺服器發送請求指令

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

Web浏覽器發送請求頭資訊

浏覽器發送其請求指令之後,還要以頭資訊的形式向Web伺服器發送一些别的資訊,之後浏覽器發送了一空白行來通知伺服器,它已經結束了該頭資訊的發送。

Web伺服器應答

客戶機向伺服器送出請求後,伺服器會客戶機回送應答, HTTP/1.1 200 OK ,應答的第一部分是協定的版本号和應答狀态碼。

Web伺服器發送應答頭資訊

正如用戶端會随同請求發送關于自身的資訊一樣,伺服器也會随同應答向使用者發送關于它自己的資料及被請求的文檔。

Web伺服器向浏覽器發送資料

Web伺服器向浏覽器發送頭資訊後,它會發送一個空白行來表示頭資訊的發送到此為結束,接着,它就以Content-Type應答頭資訊所描述的格式發送使用者所請求的實際資料。

Web伺服器關閉TCP連接配接

一般情況下,一旦Web伺服器向浏覽器發送了請求資料,它就要關閉TCP連接配接,然後如果浏覽器或者伺服器在其頭資訊加入了這行代碼:Connection:keep-alive

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

常見的HTTP相應狀态碼

200:請求被正常處理

204:請求被受理但沒有資源可以傳回

206:用戶端隻是請求資源的一部分,伺服器隻對請求的部分資源執行GET方法,相應封包中通過Content-Range指定範圍的資源。

301:永久性重定向

302:臨時重定向

303:與302狀态碼有相似功能,隻是它希望用戶端在請求一個URI的時候,能通過GET方法重定向到另一個URI上

304:發送附帶條件的請求時,條件不滿足時傳回,與重定向無關

307:臨時重定向,與302類似,隻是強制要求使用POST方法

400:請求封包文法有誤,伺服器無法識别

401:請求需要認證

403:請求的對應資源禁止被通路

404:伺服器無法找到對應資源

500:伺服器内部錯誤

503:伺服器正忙

快速記憶

1** 是伺服器告訴用戶端臨時響應,你先别急,2** 是正常響應,3** 是代表重定向,4** 用戶端問題,5** 是伺服器問題

HTTP1.1版本新特性

  • 預設持久連接配接: 節省通信量,隻要用戶端服務端任意一端沒有明确提出斷開TCP連接配接,就一直保持連接配接,可以發送多次HTTP請求
  • 管線化:用戶端可以同時發出多個HTTP請求,而不用一個個等待響應
  • 斷點續傳:實際上就是利用HTTP消息頭使用分塊傳輸編碼,将實體主體分塊傳輸。

HTTP優化方案

  • TCP複用:TCP連接配接複用是将多個用戶端的HTTP請求複用到一個伺服器端TCP連接配接上,而HTTP複用則是一個用戶端的多個HTTP請求通過一個TCP連接配接進行處理。前者是負載均衡裝置的獨特功能;而後者是HTTP 1.1協定所支援的新功能,目前被大多數浏覽器所支援。
  • 内容緩存:将經常用到的内容進行緩存起來,那麼用戶端就可以直接在記憶體中擷取相應的資料了。
  • 壓縮:将文本資料進行壓縮,減少帶寬
  • SSL加速(SSL Acceleration):使用SSL協定對HTTP協定進行加密,在通道内加密并加速
  • TCP緩沖:通過采用TCP緩沖技術,可以提高伺服器端響應時間和處理效率,減少由于通信鍊路問題給伺服器造成的連接配接負擔。

如果做到内容緩存?

Cache-Control

請求/響應頭,緩存控制字段,可以說是控制http緩存的最高指令,要不要緩存也是它說了算。

1.1 no-store:所有内容都不緩存

1.2 no-cache:緩存,但是浏覽器使用緩存前,都會請求伺服器判斷緩存資源是否是最新,它是個比較高貴的存在,因為它隻用不過期的緩存。

1.3 max-age=x(機關秒) 請求緩存後的X秒不再發起請求,屬于http1.1屬性,與下方Expires(http1.0屬性)類似,但優先級要比Expires高。

1.4 s-maxage=x(機關秒) 代理伺服器請求源站緩存後的X秒不再發起請求,隻對CDN緩存有效(這個在後面會細說)

繼續閱讀