<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                #### Keep-Alive Keep-Alive是HTTP/1.0與HTTP/1.1提供的一種特性,意味著可以提供有效的HTTP會話,以避免客戶端頻繁的建立`TCP`鏈接。主要呢就包含圖中4步~ ![](https://img.kancloud.cn/43/72/4372b3f9472c297d48e02963fa094b0e_440x390.jpg) 1. 建立`TCP`連接 2. 發送`HTTP`請求 3. 發送響應文檔 4. 釋放`TCP`連接 ***** 如果按照HTTP/1.0早起的時候,其實還不支持`Keep-Alive`屬性,當時就是一種無狀態的`短連接`,后續更新后才給加上去的,而且還得手動加。到了HTTP/1.1時期,`Keep-Alive`就直接給默認加上去了,它的作用就是保持一種`長連接`。 ![](https://img.kancloud.cn/9d/6f/9d6fbe0a12edd062bbf4c8c502e935ed_450x280.png) 1. 左圖是**并行短連接** 2. 右圖是**長連接** * 短連接 - 每次請求一個資源就建立連接,請求完成后連接立馬關閉。 * 長連接 - 只建立一次連接,多次資源請求都復用該連接,完成后關閉。 --- #### **那為什么會有這個屬性呢?** * 當時的互聯網還不怎么發達,電腦也不是特別普及,上網瀏覽的內容呢也是少之又少。如果長時間保持`TCP`的連接狀態將會耗費服務器端的大量資源。然后干脆就搞簡單點,就搞這種`短連接`的,瀏覽器對這種連接也有一定的并發最大數限制,Chrome的是6個,其他的2(IE6/7)-10(IE9)個不等。 * 隨著人類社會的發展,人們的需求日益增加,網頁內容也越來越豐富,交互的形式也越來越新花樣,新出的元素`img、script、css`等這些還要發起多次請求的怎么辦?然后HTTP/1.0就增加了一個`Keep-Alive`屬性,表示你只需要打開一次連接,多次資源訪問通過這次連接訪問就OK了,等到不需要的時候關閉就可以了。 ***** ![](https://img.kancloud.cn/de/07/de0741cb8aa9f3cf8ad2958a141ef89c_651x493.png) --- #### **那什么時候關閉Keep-Alive** 1. Ngnix配置的`keepalive_timeout`到時間了 2. Ngnix配置的`keepalive_requests`最大連接數滿了~ 3. Content-Length里的長度 --- ##### 客戶端如何知道`Content-Length`的長度 1. 服務器知道資源大小,通過header中的content-length這個屬性 ``` Content-Length:1076 (body的大小是1024B,客戶端讀取1024B就可以了) Transfer-Encoding: null ``` 2. 服務器沒法提前知道資源的大小,或者不愿意花費資源提前計算資源大小,就會把http回復報文中加一個header叫Transfer-Encoding:chunked,意思是分塊傳輸。每一塊都使用固定的格式,前邊是塊的大小,后面是數據,然后最后一塊大小是0。這樣客戶端解析的時候就需要注意去掉一些無用的字段。 ``` Content-Length:null Transfer-Encoding:chunked(接下來一塊一塊的傳,開始是一塊的大小,等傳到大小為0的塊時,就沒了) ``` 3. 服務器不知道資源的大小,同時也不支持chunked的傳輸模式,那么就既沒有content-length頭,也沒有transfer-encoding頭,這種情況下必須使用短連接,以連接結束來標示數據傳輸結束,傳輸結束就能知道大小了。這時候服務器返回的header里Connection一定是close。 ``` Content-Length:null Transfer-Encoding:null Connection:close(服務器端不知道大小,也用不了chunked,啥時候關了tcp連接,就說明傳輸結束了) ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看