<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # 概況 ![](https://img.kancloud.cn/30/48/304861a3e52b248623fa84f3df0e9d05_1142x423.png) <br> 瀏覽器中的 HTTP 請求從發起到結束一共經歷了如下八個階段:構建請求、查找緩存、準備 IP 和端口、等待 TCP 隊列、建立 TCP 連接、發起 HTTP 請求、服務器處理請求、服務器返回請求和斷開連接。 <br> # 構建請求 首先,瀏覽器構建請求行信息(如下所示),構建好后,瀏覽器準備發起網絡請求。 ``` GET /index.html HTTP1.1 ``` <br> <br> # 查找緩存 在真正發起網絡請求之前,瀏覽器會先在瀏覽器緩存中查詢是否有要請求的文件。 當瀏覽器發現請求的資源已經在瀏覽器緩存中存有副本,它會攔截請求,返回該資源的副本,并直接結束請求,而不會再去源服務器重新下載。 這樣做的好處有: * 緩解服務器端壓力,提升性能(獲取資源的耗時更短了); * 對于網站來說,緩存是實現快速資源加載的重要組成部分。 當然,如果緩存查找失敗,就會進入網絡請求過程了。 <br> <br> # 準備 IP 地址和端口 因為瀏覽器使用 HTTP 協議作為應用層協議,用來封裝請求的文本信息;并使用 TCP/IP 作傳輸層協議將它發到網絡上,所以在 HTTP 工作開始之前,瀏覽器需要通過 TCP 與服務器建立連接。 ![](https://img.kancloud.cn/d5/17/d51761e3005a1d601b14f8793395cce2_1142x570.png) 在第一步瀏覽器會請求 DNS 返回域名對應的 IP。當然瀏覽器還提供了 DNS 數據緩存服務,如果某個域名已經解析過了,那么瀏覽器會緩存解析的結果,以供下次查詢時直接使用,這樣也會減少一次網絡請求。 拿到 IP 之后,接下來就需要獲取端口號了。通常情況下,如果 URL 沒有特別指明端口號,那么 HTTP 協議默認是 80 端口。 <br> <br> # 等待 TCP 隊列 Chrome 有個機制,同一個域名同時最多只能建立 6 個 TCP 連接,如果在同一個域名下同時有 10 個請求發生,那么其中 4 個請求會進入排隊等待狀態,直至進行中的請求完成。 如果當前請求數量少于 6,會直接進入下一步,建立 TCP 連接。 <br> <br> # 建立 TCP 連接 排隊等待結束之后,終于可以快樂地和服務器握手了,在 HTTP 工作開始之前,瀏覽器通過 TCP 與服務器建立連接。 <br> <br> # 發送 HTTP 請求 一旦建立了 TCP 連接,瀏覽器就可以和服務器進行通信了。 ![](https://img.kancloud.cn/44/a5/44a55ef4ca793503e1c45e36c127bf6d_1142x656.png) <br> <br> # 服務器端處理 HTTP 請求流程 ## 返回請求 一旦服務器處理結束,便可以返回數據給瀏覽器了。 ![](https://img.kancloud.cn/6b/f5/6bf5bee0ea1d4755e4df953a42876afc_1142x651.png) ## 斷開連接 通常情況下,一旦服務器向客戶端返回了請求數據,它就要關閉 TCP 連接。不過如果瀏覽器或者服務器在其頭信息中加入了: ``` Connection:Keep-Alive ``` 那么 TCP 連接在發送后將仍然保持打開狀態,這樣瀏覽器就可以繼續通過同一個 TCP 連接發送請求。**保持 TCP 連接可以省去下次請求時需要建立連接的時間,提升資源加載速度。**比如,一個 Web 頁面中內嵌的圖片就都來自同一個 Web 站點,如果初始化了一個持久連接,你就可以復用該連接,以請求其他資源,而不需要重新再建立新的 TCP 連接。 ## 重定向 ![](https://img.kancloud.cn/6a/5c/6a5c8a50b8d24211526ff69eb17e5666_2525x1130.png) 響應行返回的狀態碼是 301,狀態 301 就是告訴瀏覽器,我需要重定向到另外一個網址,而需要重定向的網址正是包含在響應頭的 Location 字段中,接下來,瀏覽器獲取 Location 字段中的地址,并使用該地址重新導航,這就是一個完整重定向的執行流程。 <br> # 參考資料 [瀏覽器工作原理](https://time.geekbang.org/column/article/113513)
                  <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>

                              哎呀哎呀视频在线观看