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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

面试复习题--Okhttp

發布時間:2023/12/29 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试复习题--Okhttp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、http的流程

  • 使用DNS域名解析;
  • 發起TCP的3次握手
  • 建立TCP連接后發起http請求;
  • 服務器響應http請求,瀏覽器得到返回response;
  • 瀏覽器解析response,并請求其它的資源(如js、css、圖片等);
  • 瀏覽器對頁面進行渲染。
  • 2、Https的流程

    發起請求、驗證身份、協商秘鑰、加密會話,具體流程如下(此例子只有客戶端對服務端的單向驗證):

      1、客戶端向服務端發起建立HTTPS請求。

      2、服務器向客戶端發送數字證書。

      3、客戶端驗證數字證書,證書驗證通過后客戶端生成會話密鑰(雙向驗證則此處客戶端也會向服務器發送證書)。

      4、服務器生成會話密鑰(雙向驗證此處服務端也會對客戶端的證書驗證)。

      5、客戶端與服務端開始進行加密會話。

    具體的步驟如下:

    第一步:客戶端向服務端發起請求

    ? ? ? ? 1、客戶端生成隨機數R1 發送給服務端;

    ? ? ? ? 2、告訴服務端自己支持哪些加密算法;

    第二步:服務器向客戶端發送數字證書

    ? ? ? ? 1、服務端生成隨機數R2;

    ? ? ? ? 2、客戶端支持的加密算法中選擇一種雙方都支持的加密算法(此算法用于后面的會話密鑰生成)

    ? ? ? ? 3、服務端生成把證書、隨機數R2、會話密鑰生成算法,一同發給客戶端;

    第三步:客戶端驗證數字證書。

    ? ? ? ? 1、驗證證書的可靠性,先用CA的公鑰解密被加密過后的證書,能解密則說明證書沒有問題,然后通過證書里提供的摘要算法進行對數據進行摘要,然后通過自己生成的摘要與服務端發送的摘要比對。

    ? ? ? ? 2、驗證證書合法性,包括證書是否吊銷、是否到期、域名是否匹配,通過后則進行后面的流程

    ? ? ? ? 3、獲得證書的公鑰、會話密鑰生成算法、隨機數R2

    ? ? ? ? 4、生成一個隨機數R3。

    ? ? ? ? 5、根據會話秘鑰算法使用R1、R2、R3生成會話秘鑰。

    ? ? ? ? 6、用服務端證書的公鑰加密隨機數R3并發送給服務端。

    第四步:服務器得到會話密鑰

    ? ? ? ? 1、服務器用私鑰解密客戶端發過來的隨機數R3

    ? ? ? ? 2、根據會話秘鑰算法使用R1、R2、R3生成會話秘鑰

    第五步:客戶端與服務端進行加密會話

    ? ? ? ? 1、客戶端發送加密數據給服務端

    ? ? ? ? ? ? ? 發送加密數據:客戶端加密數據后發送給服務端。

    ? ? ? ? 2、服務端響應客戶端 ? ? ? ? ? ? ? ? ? ??

    ? ? ? ? ? ? ? 解密接收數據:服務端用會話密鑰解密客戶端發送的數據; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?加密響應數據:用會話密鑰把響應的數據加密發送給客戶端。

    ? ? ? ? 3、客戶端解密服務端響應的數據 ??

    ? ? ? ? ? ? ? 解密數據:客戶端用會話密鑰解密響應數據;

    3、Okhttp的流程

    (1)、當我們通過OkhttpClient創立一個okHttpClient 、Request 、Call,并發起同步或者異步請求時;

    (2)、okhttp會通過Dispatcher對我們所有的Call(RealCall實現類)進行統一管理,并通過execute()及enqueue()方法對同步或者異步請求進行執行
    (3)、execute()及enqueue()這兩個方法會最終調用RealCall中的getResponseWithInterceptorChain()方法,從阻攔器鏈中獲取返回結果;
    (4)、攔截器鏈中,依次通過ApplicationInterceptor應用攔截器、RetryAndFollowUpInterceptor(重定向阻攔器)、BridgeInterceptor(橋接阻攔器)、CacheInterceptor(緩存阻攔器)、ConnectInterceptor(連接阻攔器)、NetwrokInterceptor(網絡攔截器)、CallServerInterceptor(請求阻攔器)對請求依次處理,與服務的建立連接后,獲取返回數據,再經過上述阻攔器依次解決后,最后將結果返回給調用方。

    4、Okhttp防抓包

    ? 1、 使用Proxy.NO_PROXY進行防止抓包。
    我們在使用OkHttp進行網絡請求的時候防止Fiddler抓包可以簡單的使用OkHttpClient.Builder中的builder.proxy(Proxy.NO_PROXY);方法就可以避免Fiddler基本抓包。

    2、使用builder.proxySelector進行防止抓包。
    因為第一種方法只能避免Fiddler基本抓包方式在OkHttp中還有一種方法可以防止抓包。

    builder.proxySelector(new ProxySelector() {@Overridepublic List<Proxy> select(URI uri) {return Collections.singletonList(Proxy.NO_PROXY);}@Overridepublic void connectFailed(URI uri, SocketAddress sa, IOException ioe) {}}); 3、驗證Https證書

    這種方式要在app嵌入證書,以okhttp為例:當okhttp使用X509TrustManager對服務器證書進行校驗時,如果服務器證書的 subjectDN 和嵌入證書的 subjectDN 一致,我們再進行簽名內容 signature 的比對,如果不一致,拋出異常。示例代碼如下:

    • 首先從本地讀出證書,獲取一個X509Certificate
    val myCrt: X509Certificate by lazy {getCrt(R.raw.my_ca) }private fun getCrt(@RawRes raw: Int): X509Certificate {val certificateFactory = CertificateFactory.getInstance("X.509")val input = ApplicationContext.resources.openRawResource(raw)input.use {return certificateFactory.generateCertificate(input) as X509Certificate} }
    • 檢查服務器證書時對比嵌入的證書
    private fun getTrustManagerInRelease(): X509TrustManager {return object : X509TrustManager {override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String?) {}override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf()override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String?) {val myCrt: X509Certificate = myCrtif (chain[0].subjectDN.name == myCrt.subjectDN.name) {if (!myCrt.signature!!.contentEquals(chain[0].signature)) {throw SSLHandshakeException("簽名不符!")}}}} }
    • 將自定義的 SSLSocketFactory 和 X509TrustManager 將入到 okhttp 客戶端
    private fun getClient(ssl: SSLSocketFactory, trustManager: X509TrustManager): OkHttpClient {return OkHttpClient.Builder().retryOnConnectionFailure(true).proxy(Proxy.NO_PROXY).sslSocketFactory(ssl, trustManager).build() }

    5、攔截器

    RetryAndFollowUpInterceptor(重試和重定向攔截器)
    第一個接觸到請求,最后接觸到響應;負責判斷是否需要重新發起整個請求;主要就是完成兩件事情:重試與重定向
    BridgeInterceptor(橋接攔截器)
    補全請求,并對響應進行額外處理
    CacheInterceptor(緩存攔截器)
    請求前查詢緩存,獲得響應并判斷是否需要緩存
    ConnectInterceptor(鏈接攔截器)
    與服務器完成TCP連接 (Socket)
    CallServerInterceptor(請求服務攔截器)
    與服務器通信;封裝請求數據與解析響應數據(如:HTTP報文)
    關聯:https://blog.csdn.net/qq_45866344/article/details/125052085

    6、優點

    ?(1)內置連接池,支持連接復用;
    (2)支持gzip壓縮響應體;
    (3)通過緩存避免重復的請求;
    (4)支持http2,對一臺機器的所有請求共享同一個socket

    7、連接池

    OkHttp里面使用ConnectionPool實現連接池,而且默認支持5個并發KeepAlive,默認鏈路生命為5分鐘。?雙端隊列Deque,雙端都能進出,用來存儲連接的。OkHttp框架采用的是Socket連接,底層涉及到Http協議的封裝和解封,TLS/SSL安全協議的封裝等;連接池主要涉及到幾大類:ConnectionPool,RealConnection,StreamAllocation,ConnectionInterceptor;

    1.ConnectionPool類:

    該類是OkHttp的連接池,連接池可以有效地提高連接的使用效率;
    主要涉及到添加,獲取,刪除連接等功能;

    2.RealConection類:

    RealConnection是Connection的是實現類,代表著一個真正的socket連接,RealConnection代表著客戶端和服務器端已經有了一個通信鏈路;

    3.StreamAllocation類:

    StreamAllocation是外界使用Okhttp的連接的橋梁,通過newStream方法返回一個可使用的流,即HttpCodec實例,通過HttpCodec可以將輸入數據封裝成相應的Http協議的數據,然后通過socket的輸出流發送出去,同時也可以通過socket的輸入流讀取數據并解析數據;

    8、線程池

    在OKHttp中,創建了一個閥值是Integer.MAX_VALUE的線程池,它不保留任何最小線程,隨時創建更多的線程數,而且如果線程空閑后,只能多活60秒。所以也就說如果收到20個并發請求,線程池會創建20個線程,當完成后的60秒后會自動關閉所有20個線程。他這樣設計成不設上限的線程,以保證I/O任務中高阻塞低占用的過程,不會長時間卡在阻塞上。

    總結

    以上是生活随笔為你收集整理的面试复习题--Okhttp的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 牛牛超碰| 五月天婷婷综合网 | 欧美黑人多人双交 | 国产精品成人免费精品自在线观看 | 欧美日韩精品一区二区在线观看 | 翔田千里一区 | 精品视频日韩 | 伊人天堂在线 | 精品视频 | 99伊人 | 北岛玲在线 | www.亚洲视频| 国产精品久久久久久久免费大片 | 亚洲日本精品视频 | 国产成人专区 | 黄色网址你懂的 | 久久免费精彩视频 | 精品少妇 | 三浦惠理子aⅴ一二三区 | 欧美韩国一区 | 在线激情| 亚洲AV无码国产精品 | 中文字幕影片免费在线观看 | 亚洲色图偷拍视频 | 成人久久久久久久 | 久久久九九九热 | 奇米影视第四色7777 | 亚洲黄色三级视频 | 久久日本视频 | 国产成人av免费看 | 国产亚洲精品久久久久久久 | 日本美女毛片 | 国产污污网站 | 日韩欧美超碰 | 国产黄色视 | 另类色综合 | 影音先锋毛片 | 日韩精品久久久久久 | 91免费高清| 日本男人的天堂 | 日韩在线视频网 | 91抖音在线观看 | 欧美成人黄色网 | 草莓巧克力香氛动漫的观看方法 | 欧美日韩免费高清 | 91视频免费在线 | 少妇2做爰交换朴银狐 | 老司机av福利 | av网站黄色 | 好色成人网 | 麻豆三级在线观看 | 动漫美女露胸网站 | 波多野结衣在线免费观看视频 | 男人的天堂国产 | 日本色中色 | 九七影院在线观看免费观看电视 | 国内精品毛片 | 另类色综合 | 自拍偷拍18p | 国产成人精品无码高潮 | 天天做夜夜爱 | 国产成人自拍在线 | 日韩av影片在线观看 | 免费的理伦片在线播放 | 岛国av一区二区三区 | 精品少妇人妻av一区二区三区 | 极品少妇xxxx精品少妇 | 亚洲精品一二三区 | 丰满护士巨好爽好大乳 | 国产精品一区二区三区高潮 | 久久久久久国产视频 | 97夜夜| 国产亚洲一区二区三区在线观看 | 国产一区在线播放 | 337p粉嫩日本欧洲亚洲大胆 | 九月婷婷 | 日本毛片视频 | 中文一二区 | 在线观看免费视频 | 激情欧美日韩 | 国产一二精品 | 一区二区福利 | 九色蝌蚪9l视频蝌蚪9l视频 | 日韩一区二区三区三四区视频在线观看 | 亚洲免费一区二区 | 看片日韩| 午夜不卡在线观看 | 91精品国产福利在线观看 | 91av毛片| 亚洲理论电影在线观看 | 日韩在线激情 | 久久毛片网| 日日躁夜夜躁狠狠躁 | 日韩av中文字幕在线 | 亚洲 激情| 动漫美女靠逼 | 污的网站| 国产成人高清在线 | 青青青网|