Android 面試必備 - http 與 https 協議

前言

在講解 http 與 https 之間的區別之前,我麼先來看一下一個常見的面試問題。

一次完整的 http 協議請求過程是怎樣的

該圖片出自 博客

Http協議的主要特點

  1. 支持客戶/服務器模式
  2. 簡單快速:客戶向服務端請求服務時,只需傳送請求方式和路徑。
  3. 靈活:允許傳輸任意類型的數據對象。由Content-Type加以標記。
  4. 無連接:每次響應一個請求,響應完成以後就斷開連接。
  5. 無狀態:服務器不保存瀏覽器的任何信息。每次提交的請求之間沒有關聯。

怎麼理解HTTP協議是無狀態的無連接的的協議?

非持續性和持續性

HTTP1.0默認非持續性;HTTP1.1默認持續性

持續性:瀏覽器和服務器建立TCP連接後,可以請求多個對象

非持續性:瀏覽器和服務器建立TCP連接後,只能請求一個對象

非流水線和流水線

類似於組成裏面的流水操作

  • 流水線:不必等到收到服務器的迴應就發送下一個報文。
  • 非流水線:發出一個報文,等到響應,再發下一個報文。類似TCP。

http 各個版本之間的區別

1.0 與 1.1

  • http1.0一次只能處理一個請求,不能同時收發數據
  • http1.1可以處理多個請求,能同時收發數據
  • http1.1增加可更多字段,如cache-control,keep-alive.

2.0

  • http 2.0採用二進制的格式傳送數據,不再使用文本格式傳送數據
  • http2.0對消息頭採用hpack壓縮算法,http1.x的版本消息頭帶有大量的冗餘消息
  • http2.0 採用多路複用,即用一個tcp連接處理所有的請求,真正意義上做到了併發請求,流還支持優先級和流量控制(HTTP/1.x 雖然通過 pipeline也能併發請求,但是多個請求之間的響應會被阻塞的,所以 pipeline 至今也沒有被普及應用,而 HTTP/2 做到了真正的併發請求。同時,流還支持優先級和流量控制。)
  • http2.0支持server push,服務端可以主動把css,jsp文件主動推送到客戶端,不需要客戶端解析HTML,再發送請求,當客戶端需要的時候,它已經在客戶端了。

POST和GET的區別

Post一般用於更新或者添加資源信息 Get一般用於查詢操作,而且應該是安全和冪等的
Post更加安全 Get會把請求的信息放到URL的後面
Post傳輸量一般無大小限制 Get不能大於2KB
Post執行效率低 Get執行效率略高

爲什麼POST效率低,Get效率高

  • Get將參數拼成URL,放到header消息頭裏傳遞
  • Post直接以鍵值對的形式放到消息體中傳遞。
  • 但兩者的效率差距很小很小

Https

HTTPS相當於HTTP的安全版本了,是在http的基礎之上加上ssl(Secure Socket Layer)

  • 端口號是443
  • 是由SSL+Http協議構建的可進行加密傳輸、身份認證的網絡協議。

https在客戶端(瀏覽器)與服務端(網站)傳輸加密的數據大概經歷一下流程

  1. 客戶端將自己的has算法和加密算法發給服務器
  2. 服務器接收到客戶端發來的加密算法和has算法,取出自己的加密算法與has算法,並將自己的身份信息以證書的形式發送給客戶端,該證書信息包括公鑰,網站地址,預計頒發機構等
  3. 客戶端收到服務器發來的證書(即公鑰),開始驗證證書的合法性,如果證書信任,則生成一串隨機的字符串數字作爲私鑰,並將私鑰(密文)用證書(服務器的公鑰)進行加密,發送給服務器
  4. 服務器收到客戶端發來的數據之後,通過服務器自己的私鑰進行解密客戶端發來的數據(客戶端的私鑰),(這樣雙方都擁有私鑰)再進行hash檢驗,如果結果一致,則將客戶端發來的字符串(第3個步驟發送過來的字符串)通過加密發送給客戶端
  5. 客戶端解密,如果一致的話,就使用之前客戶端隨機生成的字符串進行對稱加密算法進行加密

推薦閱讀

聊一聊 Android 中巧妙的位操作

二分查找的相關算法題

快速排序的相關算法題(java)

Android 面試必備 - 計算機網絡基本知識(TCP,UDP,Http,https)

360面試總結(Android)

掃一掃,歡迎關注我的公衆號 stormjun94。如果你有好的文章,也歡迎你的投稿。

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