日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

带你全面了解Http和Https

發布時間:2024/9/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 带你全面了解Http和Https 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

戳藍字“CSDN云計算”關注我們哦!


作者:??左大人 | 來源 公眾號 程序員小樂

來源:jianshu.com/p/27862635c077

?00 前言?

Http和Https屬于計算機網絡范疇,但作為開發人員,不管是后臺開發或是前臺開發,都很有必要掌握它們。
在學習Http和Https的過程中,主要是參考了阮一峰老師的博客,講的很全面,并且通俗易懂,有興趣的同學可以去學習學習。


http://www.ruanyifeng.com/blog/2016/08/http.html


這篇文章主要是按照自己的思路來講解對Http和Https的理解。文章將會從以下幾個方面介紹。

目錄樹:



從目錄結構可以看出,每個標題展開來說都是一個很大的主題。但本文旨在讓各位同學對Http和Https相關知識有一個全面的認知,不會太過深入探討各個主題,有興趣的同學可以進行針對性研究。


?01?網絡層結構?

網絡結構有兩種主流的分層方式:OSI七層模型和TCP/IP四層模型。


OSI七層模型和TCP/IP四層模型


OSI是指Open System Interconnect,意為開放式系統互聯。


TCP/IP是指傳輸控制協議/網間協議,是目前世界上應用最廣的協議。



兩種模型區別


  • OSI采用七層模型,TCP/IP是四層模型

  • TCP/IP網絡接口層沒有真正的定義,只是概念性的描述。OSI把它分為2層,每一層功能詳盡。

  • 在協議開發之前,就有了OSI模型,所以OSI模型具有共通性,而TCP/IP是基于協議建立的模型,不適用于非TCP/IP的網絡。

  • 實際應用中,OSI模型是理論上的模型,沒有成熟的產品;而TCP/IP已經成為國際標準。


  • ?02?HTTP協議?

    Http是基于TCP/IP協議的應用程序協議,不包括數據包的傳輸,主要規定了客戶端和服務器的通信格式,默認使用80端口。


    Http協議的發展歷史


  • 1991年發布Http/0.9版本,只有Get命令,且服務端直返HTML格式字符串,服務器響應完畢就關閉TCP連接。

  • 1996年發布Http/1.0版本,優點:可以發送任何格式內容,包括文字、圖像、視頻、二進制。也豐富了命令Get,Post,Head。請求和響應的格式加入頭信息。缺點:每個TCP連接只能發送一個請求,而新建TCP連接的成本很高,導致Http/1.0新能很差。

  • 1997發布Http/1.1版本,完善了Http協議,直至20年后的今天仍是最流行的版本。
    優點:a. 引入持久連接,TCP默認不關閉,可被多個請求復用,對于一個域名,多數瀏覽器允許同時建立6個持久連接。b. 引入管道機制,即在同一個TCP連接中,可以同時發送多個請求,不過服務器還是按順序響應。c. 在頭部加入Content-Length字段,一個TCP可以同時傳送多個響應,所以就需要該字段來區分哪些內容屬于哪個響應。d. 分塊傳輸編碼,對于耗時的動態操作,用流模式取代緩存模式,即產生一塊數據,就發送一塊數據。e. 增加了許多命令,頭信息增加Host來指定服務器域名,可以訪問一臺服務器上的不同網站。
    缺點:TCP連接中的響應有順序,服務器處理完一個回應才能處理下一個回應,如果某個回應特別慢,后面的請求就會排隊等著(對頭堵塞)。

  • 2015年發布Http/2版本,它有幾個特性:二進制協議、多工、數據流、頭信息壓縮、服務器推送。

  • Http請求和響應格式


    Request格式:


    GET?/barite/account/stock/groups?HTTP/1.1QUARTZ-SESSION:?MC4xMDQ0NjA3NTI0Mzc0MjAyNg.VPXuA8rxTghcZlRCfiAwZlAIdCADEVICE-TYPE:?ANDROIDAPI-VERSION:?15Host:?shitouji.bluestonehk.comConnection:?Keep-AliveAccept-Encoding:?gzipUser-Agent:?okhttp/3.10.0QUARTZ-SESSION:?MC4xMDQ0NjA3NTI0Mzc0MjAyNg.VPXuA8rxTghcZlRCfiAwZlAIdCA
    DEVICE-TYPE:?ANDROID
    API-VERSION:?15
    Host:?shitouji.bluestonehk.com
    Connection:?Keep-Alive
    Accept-Encoding:?gzip
    User-Agent:?okhttp/3.10.0


    Response格式:


    HTTP/1.1?200?OKServer:?nginx/1.6.3Date:?Mon,?15?Oct?2018?03:30:28?GMTContent-Type:?application/json;charset=UTF-8Pragma:?no-cacheCache-Control:?no-cacheExpires:?Thu,?01?Jan?1970?00:00:00?GMTContent-Encoding:?gzipTransfer-Encoding:?chunkedProxy-Connection:?Keep-alive{"errno":0,"dialogInfo":null,"body":{"list":[{"flag":2,"group_id":1557,"group_name":"港股","count":1},{"flag":3,"group_id":1558,"group_name":"美股","count":7},{"flag":1,"group_id":1556,"group_name":"全部","count":8}]},"message":"success"}
    Date:?Mon,?15?Oct?2018?03:30:28?GMT
    Content-Type:?application/json;charset=UTF-8
    Pragma:?no-cache
    Cache-Control:?no-cache
    Expires:?Thu,?01?Jan?1970?00:00:00?GMT
    Content-Encoding:?gzip
    Transfer-Encoding:?chunked
    Proxy-Connection:?Keep-alive

    {"errno":0,"dialogInfo":null,"body":{"list":[{"flag":2,"group_id":1557,"group_name":"港股","count":1},{"flag":3,"group_id":1558,"group_name":"美股","count":7},{"flag":1,"group_id":1556,"group_name":"全部","count":8}]},"message":"success"}


    說明一下請求頭和響應頭的部分字段:



    03?Tcp三次握手?

    Http和Https協議請求時都會通過Tcp三次握手建立Tcp連接。


    那么,三次握手是指什么呢?



    那么,為什么一定要三次握手呢,一次可以嗎?兩次可以嗎?


    帶著這些問題,我們來分析一下為什么必須是三次握手。


  • 第一次握手,A向B發送信息后,B收到信息。B可確認A的發信能力和B的收信能力

  • 第二次握手,B向A發消息,A收到消息。A可確認A的發信能力和收信能力,A也可確認B的收信能力和發信能力

  • 第三次握手,A向B發送消息,B接收到消息。B可確認A的收信能力和B的發信能力


  • 通過三次握手,A和B都能確認自己和對方的收發信能力,相當于建立了互相的信任,就可以開始通信了。

    下面,我們介紹一下三次握手具體發送的內容,用一張圖描述如下:



    首先,介紹一下幾個概念:



    知道了上面幾個概念后,看一下三次握手的具體流程:


  • 第一次握手:建立連接請求。客戶端發送連接請求報文段,將SYN置為1,seq為隨機數x。然后,客戶端進入SYN_SEND狀態,等待服務器確認。

  • 第二次握手:確認連接請求。服務器收到客戶端的SYN報文段,需要對該請求進行確認,設置ack=x+1(即客戶端seq+1)。同時自己也要發送SYN請求信息,即SYN置為1,seq=y。服務器將SYN和ACK信息放在一個報文段中,一并發送給客戶端,服務器進入SYN_RECV狀態。

  • 第三次握手:客戶端收到SYN+ACK報文段,將ack設置為y+1,向服務器發送ACK報文段,這個報文段發送完畢,客戶端和服務券進入ESTABLISHED狀態,完成Tcp三次握手。


  • 從圖中可以看出,建立連接經歷了三次握手,當數據傳輸完畢,需要斷開連接,而斷開連接經歷了四次揮手:


  • 第一次揮手:主機1(可以是客戶端或服務器),設置seq和ack向主機2發送一個FIN報文段,此時主機1進入FIN_WAIT_1狀態,表示沒有數據要發送給主機2了

  • 第二次揮手:主機2收到主機1的FIN報文段,向主機1回應一個ACK報文段,表示同意關閉請求,主機1進入FIN_WAIT_2狀態。

  • 第三次揮手:主機2向主機1發送FIN報文段,請求關閉連接,主機2進入LAST_ACK狀態。

  • 第四次揮手:主機1收到主機2的FIN報文段,想主機2回應ACK報文段,然后主機1進入TIME_WAIT狀態;主機2收到主機1的ACK報文段后,關閉連接。此時主機1等待主機2一段時間后,沒有收到回復,證明主機2已經正常關閉,主機1頁關閉連接。


  • 下面是Tcp報文段首部格式圖,對于理解Tcp協議很重要:



    ?04?Https協議/SSL協議?

    Https協議是以安全為目標的Http通道,簡單來說就是Http的安全版。主要是在Http下加入SSL層(現在主流的是SLL/TLS),SSL是Https協議的安全基礎。Https默認端口號為443。


    前面介紹了Http協議,各位同學能說出Http存在的風險嗎?


  • 竊聽風險:Http采用明文傳輸數據,第三方可以獲知通信內容

  • 篡改風險:第三方可以修改通信內容

  • 冒充風險:第三方可以冒充他人身份進行通信


  • SSL/TLS協議就是為了解決這些風險而設計,希望達到:


  • 所有信息加密傳輸,三方竊聽通信內容

  • 具有校驗機制,內容一旦被篡改,通信雙發立刻會發現

  • 配備身份證書,防止身份被冒充


  • 下面主要介紹SSL/TLS協議。


    SSL發展史(互聯網加密通信)


  • 1994年NetSpace公司設計SSL協議(Secure Sockets Layout)1.0版本,但未發布。

  • 1995年NetSpace發布SSL/2.0版本,很快發現有嚴重漏洞

  • 1996年發布SSL/3.0版本,得到大規模應用

  • 1999年,發布了SSL升級版TLS/1.0版本,目前應用最廣泛的版本

  • 2006年和2008年,發布了TLS/1.1版本和TLS/1.2版本

  • SSL原理及運行過程


    SSL/TLS協議基本思路是采用公鑰加密法(最有名的是RSA加密算法)。大概流程是,客戶端向服務器索要公鑰,然后用公鑰加密信息,服務器收到密文,用自己的私鑰解密。


    為了防止公鑰被篡改,把公鑰放在數字證書中,證書可信則公鑰可信。公鑰加密計算量很大,為了提高效率,服務端和客戶端都生成對話秘鑰,用它加密信息,而對話秘鑰是對稱加密,速度非常快。而公鑰用來機密對話秘鑰。


    下面用一張圖表示SSL加密傳輸過程:



    詳細介紹一下圖中過程:


  • 客戶端給出協議版本號、一個客戶端隨機數A(Client random)以及客戶端支持的加密方式

  • 服務端確認雙方使用的加密方式,并給出數字證書、一個服務器生成的隨機數B(Server random)

  • 客戶端確認數字證書有效,生成一個新的隨機數C(Pre-master-secret),使用證書中的公鑰對C加密,發送給服務端

  • 服務端使用自己的私鑰解密出C

  • 客戶端和服務器根據約定的加密方法,使用三個隨機數ABC,生成對話秘鑰,之后的通信都用這個對話秘鑰進行加密。


  • 05?SSL證書?

    上面提到了,Https協議中需要使用到SSL證書。


    SSL證書是一個二進制文件,里面包含經過認證的網站公鑰和一些元數據,需要從經銷商購買。
    證書有很多類型,按認證級別分類:



    EV證書瀏覽器地址欄樣式:



    OV證書瀏覽器地址欄樣式:



    DV證書瀏覽器樣式:



    按覆蓋范圍分類:



    認證級別越高,覆蓋范圍越廣的證書,價格越貴。也有免費的證書,為了推廣Https,電子前哨基金會成立了Let's Encrypt提供免費證書。


    https://letsencrypt.org/


    證書的經銷商也很多,知名度比較高的有亞洲誠信(Trust Asia)。


    06?RSA加密和DH加密?

    加密算法分類


    加密算法分為對稱加密、非對稱加密和Hash加密算法。



    對稱加密算法加解密效率高,速度快,適合大數據量加解密。常見的堆成加密算法有DES、AES、RC5、Blowfish、IDEA


    非對稱加密算法復雜,加解密速度慢,但安全性高,一般與對稱加密結合使用(對稱加密通信內容,非對稱加密對稱秘鑰)。


    常見的非對稱加密算法有RSA、DH、DSA、ECC


    Hash算法特性是:輸入值一樣,經過哈希函數得到相同的散列值,但并非散列值相同則輸入值也相同。常見的Hash加密算法有MD5、SHA-1、SHA-X系列


    下面著重介紹一下RSA算法和DH算法。


    RSA加密算法


    Https協議就是使用RSA加密算法,可以說RSA加密算法是宇宙中最重要的加密算法。


    RSA算法用到一些數論知識,包括互質關系,歐拉函數,歐拉定理。此處不具體介紹加密的過程,如果有興趣,可以參照RSA算法加密過程。

    http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html


    RSA算法的安全保障基于大數分解問題,
    目前破解過的最大秘鑰是700+位,也就代表1024位秘鑰和2048位秘鑰可以認為絕對安全。


    大數分解主要難點在于計算能力,如果未來計算能力有了質的提升,那么這些秘鑰也是有可能被破解的。


    DH加密算法


    DH也是一種非對稱加密算法,DH加密算法過程。

    https://zh.wikipedia.org/wiki/%E8%BF%AA%E8%8F%B2-%E8%B5%AB%E7%88%BE%E6%9B%BC%E5%AF%86%E9%91%B0%E4%BA%A4%E6%8F%9B


    DH算法的安全保障是基于離散對數問題。



    07?Http協議和Https協議的對比?


    Http和Https的區別如下:


  • https協議需要到CA申請證書,大多數情況下需要一定費用

  • Http是超文本傳輸協議,信息采用明文傳輸,Https則是具有安全性SSL加密傳輸協議

  • Http和Https端口號不一樣,Http是80端口,Https是443端口

  • Http連接是無狀態的,而Https采用Http+SSL構建可進行加密傳輸、身份認證的網絡協議,更安全。

  • Http協議建立連接的過程比Https協議快。因為Https除了Tcp三次握手,還要經過SSL握手。連接建立之后數據傳輸速度,二者無明顯區別。



  • ?08 總結?

    經過了3天的學習和總結,總算完成了這篇文章,本文可以幫助讀者大體上把握Http和Https的知識框架。


    并沒有深入探討每個主題的內容,當讀者有了自己知識框架之后,可以自行深入了解每個知識點的內容。
    這邊提供一份總結資料:計算機網絡相關知識匯總。




    福利

    掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!


    推薦閱讀:

    • 邊緣計算將吞掉云計算!

    • ARM 發布新一代 CPU 和 GPU,實現 20% 性能提升!

    • 前端開發 20 年變遷史

    • 北漂杭漂的程序員,是如何買到第一套房子?

    • “愛裝X”開源組織:“教科書級”AI知識樹究竟長什么樣?

    • 500行Python代碼打造刷臉考勤系統

    • 權游播完了, 你在罵爛尾, 有人卻悄悄解鎖了新操作……


    真香,朕在看了!

    總結

    以上是生活随笔為你收集整理的带你全面了解Http和Https的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。