成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試突擊:輸入URL之后會執行什么流程?

網絡 通信技術
為什么不直接訪問 IP 地址來請求服務器?因為 IP 地址很長,不方便記憶,而 URL 地址好記很多,所以會使用 URL 來替代 IP 地址,而 URL 就像 IP 地址的別名一樣,用它可以定位到相應的 IP 地址。

在瀏覽器中輸入 URL 之后,它會執行以下幾個流程:

  • 執行 DNS 域名解析;
  • 封裝 HTTP 請求數據包;
  • 封裝 TCP 請求數據包;
  • 建立 TCP 連接(3 次握手);
  • 參數從客戶端傳遞到服務器端;
  • 服務器端得到客戶端參數之后,進行相應的業務處理,再將結果封裝成 HTTP 包,返回給客戶端;
  • 服務器端和客戶端的交互完成,斷開 TCP 連接(4 次揮手);
  • 瀏覽器通過自身執行引擎,渲染并展示最終結果給用戶。

1.DNS 域名解析

在網絡中定位是依靠 IP 進行身份定位的,所以 URL 訪問的第一步便是先要得到服務器端的 IP 地址。而得到服務器的 IP 地址需要使用 DNS(Domain Name System,域名系統)域名解析,DNS 域名解析就是通過 URL 找到與之相對應的 IP 地址。

PS:為什么不直接訪問 IP 地址來請求服務器?因為 IP 地址很長,不方便記憶,而 URL 地址好記很多,所以會使用 URL 來替代 IP 地址,而 URL 就像 IP 地址的別名一樣,用它可以定位到相應的 IP 地址。

DNS 域名解析的大致流程如下:

  • 先檢查瀏覽器中的 DNS 緩存,如果瀏覽器中有對應的記錄會直接使用,并完成解析;
  • 如果瀏覽器沒有緩存,那就去查詢操作系統的緩存,如果查詢到記錄就可以直接返回 IP 地址,完成解析;
  • 如果操作系統沒有 DNS 緩存,就會去查看本地 host 文件,Windows 操作系統下,host 文件一般位于 "C:\Windows\System32\drivers\etc\hosts",如果 host 文件有記錄則直接使用;
  • 如果本地 host 文件沒有相應的記錄,會請求本地 DNS 服務器,本地 DNS 服務器一般是由本地網絡服務商如移動、電信提供。通常情況下可通過 DHCP 自動分配,當然你也可以自己手動配置。目前用的比較多的是谷歌提供的公用 DNS 是 8.8.8.8 和國內的公用 DNS 是 114.114.114.114。
  • 如果本地 DNS 服務器沒有相應的記錄,就會去根域名服務器查詢了,目前全球一共有 13 組根域名服務器(這里并不是指 13 臺服務器,是指 13 個 ip 地址,按字母 a-m 編號),為了能更高效完成全球所有域名的解析請求,根域名服務器本身并不會直接去解析域名,而是會把不同的解析請求分配給下面的其他服務器去完成,下面是 DNS 域名系統的樹狀結構圖:

圖片

2.封裝 HTTP 請求數據包

一個 HTTP 請求對象包含 4 部分內容:

  • 請求行
  • 請求報頭
  • 空行
  • 請求正文

它的基本格式如下:

圖片

在得到了服務器 IP 之后,緊接著會將本地的請求封裝成一個 HTTP 數據包,如上圖所示。

3.封裝 TCP 請求數據包

HTTP 底層是依賴 TCP/IP 協議實現的,所以在底層數據傳輸時,會將 HTTP 請求包進一步封裝成 TCP 數據包。

4.建立 TCP 連接(3 次握手)

HTTP 通訊的基礎是 TCP 連接,TCP 連接需要 3 次握手,3 次握手就是為了驗證客戶端的發送能力和接收能力,以及服務器端的發生能力和接收能力,就像打電話一樣,通常的通話是這樣開頭的:

  • _我_:喂,能聽到嗎?
  • _對方_:能聽到,你能聽到嗎?(證明了對方的接收能力和我的發送能力)
  • _我_:我也能聽到,咱們聊正事吧。(證明了對方的發送能力和我的接收能力)

經過以上 3 次握手就可以證明客戶端的發送能力和接收能力,以及服務器端的發生能力和接收能力,這樣就可以正式開始通訊了。

5.服務器端獲取到 HTTP 請求參數

數據在經過 TCP 傳到到服務器程序之后,又會將 TCP 的數據包轉換成 HTTP 數據包(這一切都是 TCP/IP 協議的功勞),這樣服務器端就可以得到客戶端發送的請求數據了。

6.服務器端執行業務處理,并返回數據

服務器端拿到了客戶端的請求參數之后,會進行相應的業務處理,處理完成之后,再將處理的結果返回給客戶端。返回的流程和發送的流程類似,先將結果封裝成 HTTP 數據包,HTTP 數據包可分為以下 4 部分:

  • 狀態行
  • 響應報頭
  • 空行
  • 響應正文

它的基本格式如下:

圖片

狀態行用于描述服務器的返回狀態,它由 3 部分組成:

  • HTTP 版本號,如 HTTP/1.1;
  • 狀態碼,如 200;
  • 狀態描述信息,如 OK;

常見的狀態碼有以下幾個:

  • 200:返回成功;
  • 301:永久重定向;
  • 302:臨時重定向;
  • 404:未找到頁面;
  • 500:服務器程序出錯。

響應正文就是返回給客戶端的所有數據。

7.斷開 TCP 連接(4 次揮手)

在經過一次請求和一次響應之后,客戶端和服務器的“交流”就結束了,此時就可以執行 TCP 連接斷開的流程了,它需要 4 次揮手:

  • _客戶端_:咱們分手吧;
  • _服務器端_:好的,讓我準備一下。
  • _服務器端_:我準備好了,分手吧。
  • _客戶端_:好的。

經過了以上流程之后,TCP 的連接就斷開了。

8.瀏覽器渲染并展示結果

經過 TCP 交互之后,客戶端也得到了服務器端返回的數據,然后使用瀏覽器自身的執行引擎,將最終的結果展示給用戶,整個執行流程就結束了。

參考 & 鳴謝

zhuanlan.zhihu.com/p/58108010?

責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2023-02-04 07:34:12

URLIP身份定位

2022-05-05 07:38:32

volatilJava并發

2022-07-27 07:36:01

TCP可靠性

2023-05-04 00:16:39

數字化轉型運營

2022-08-22 07:06:32

MyBatisSQL占位符

2022-05-30 07:34:33

三范式Java

2022-07-13 07:06:47

HTTPSHTTP協議

2022-03-28 08:31:29

線程池定時任務

2020-09-26 22:00:28

深度學習神經網絡深度神經網絡

2022-08-03 07:04:56

GETHTTPPOST

2022-04-26 08:02:00

locktryLocklockInterr

2022-08-10 07:06:57

IoCDISpring

2022-09-20 22:27:08

事務失效public 修飾

2022-04-24 07:59:53

synchronizJVMAPI

2022-01-24 07:01:20

安全多線程版本

2022-02-08 07:02:32

進程線程操作系統

2022-08-15 07:06:50

Propertiesyml配置

2022-06-27 07:23:44

MySQL常量優化

2022-09-07 07:05:25

跨域問題安全架構

2022-08-01 07:07:15

粘包半包封裝
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲专区在线 | av免费在线播放 | 99精品视频免费在线观看 | 亚洲欧美男人天堂 | 日韩国产欧美在线观看 | 精品一区二区电影 | 午夜电影网 | 日韩在线看片 | 第一区在线观看免费国语入口 | 福利久久| 国产精品一区二区不卡 | 在线观看免费国产 | 在线播放国产一区二区三区 | 亚洲二区视频 | 国产日韩精品视频 | 亚洲国产精品一区二区第一页 | 一区二区三区在线播放 | 国产成人精品久久久 | 中文字幕国产视频 | 一区日韩 | 久久久999精品 | 97伦理电影网 | 黄色av免费网站 | 国产欧美在线播放 | 精品国产欧美一区二区三区不卡 | 精品国产精品国产偷麻豆 | 日韩精品成人免费观看视频 | 自拍偷拍亚洲一区 | 国产91 在线播放 | 91视频免费在观看 | 蜜桃视频在线观看免费视频网站www | 欧美日韩综合一区 | 国产激情91久久精品导航 | 免费成人午夜 | 在线免费观看欧美 | 一级做a爰片性色毛片 | 91免费福利在线 | 激情欧美一区二区三区中文字幕 | 国产欧美在线播放 | 天堂中文在线观看 | 久久国产亚洲 |