版權聲明:本文爲博主原創文章,遵循[ CC 4.0
by-sa ](http://creativecommons.org/li...,轉載請附上原文出處連接和本聲明。css
本文連接:https://blog.csdn.net/gdutxia...java
前言
在講解 http 與 https 之間的區別以前,我麼先來看一下一個常見的面試問題。面試
一次完整的 http 協議請求過程是怎樣的算法
該圖片出自 博客瀏覽器
Http協議的主要特色
- 支持客戶/服務器模式
- 簡單快速:客戶向服務端請求服務時,只需傳送請求方式和路徑。
- 靈活:容許傳輸任意類型的數據對象。由Content-Type加以標記。
- 無鏈接:每次響應一個請求,響應完成之後就斷開鏈接。
- 無狀態:服務器不保存瀏覽器的任何信息。每次提交的請求之間沒有關聯。
怎麼理解HTTP協議是無狀態的無鏈接的的協議?安全
非持續性和持續性
HTTP1.0默認非持續性;HTTP1.1默認持續性服務器
持續性:瀏覽器和服務器創建TCP鏈接後,能夠請求多個對象網絡
非持續性:瀏覽器和服務器創建TCP鏈接後,只能請求一個對象併發
非流水線和流水線
相似於組成裏面的流水操做jsp
- 流水線:沒必要等到收到服務器的迴應就發送下一個報文。
- 非流水線:發出一個報文,等到響應,再發下一個報文。相似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在客戶端(瀏覽器)與服務端(網站)傳輸加密的數據大概經歷一下流程
- 客戶端將本身的has算法和加密算法發給服務器
- 服務器接收到客戶端發來的加密算法和has算法,取出本身的加密算法與has算法,並將本身的身份信息以證書的形式發送給客戶端,該證書信息包括公鑰,網站地址,預計頒發機構等
- 客戶端收到服務器發來的證書(即公鑰),開始驗證證書的合法性,若是證書信任,則生成一串隨機的字符串數字做爲私鑰,並將私鑰(密文)用證書(服務器的公鑰)進行加密,發送給服務器
- 服務器收到客戶端發來的數據以後,經過服務器本身的私鑰進行解密客戶端發來的數據(客戶端的私鑰),(這樣雙方都擁有私鑰)再進行hash檢驗,若是結果一致,則將客戶端發來的字符串(第3個步驟發送過來的字符串)經過加密發送給客戶端
- 客戶端解密,若是一致的話,就使用以前客戶端隨機生成的字符串進行對稱加密算法進行加密
推薦閱讀
聊一聊 Android中巧妙的位操做
二分查找的相關算法題
快速排序的相關算法題(java)
Android 面試必備 -計算機網絡基本知識(TCP,UDP,Http,https)
360面試總結(Android)
掃一掃,歡迎關注個人公衆號 stormjun94。若是你有好的文章,也歡迎你的投稿。