好家伙,發現自己的網路知識十分匱乏,趕緊補一下
這里先舉個我生活中的例子
欸,作業不會寫了,上網搜一下
用edge瀏覽器上bing必應搜一下(百度廣告太多了,真不想用百度舉例子)
假設這是我們第一次訪問bing的首頁 當我向瀏覽器中輸入https://cn.bing.com/并按下回車 瀏覽器做了什么? (我們要分清兩個端,客戶端和服務器端)
1.瀏覽器向寬帶運營商服務器或者域名服務器發起一個 DNS 決議請求,之后瀏覽器獲得了bing首頁的 IP 地址,
2.拿到 IP 地址后,瀏覽器就向該 IP 所在的服務器建立 TCP 連接(即三次握手),
3.連接建立起來之后,瀏覽器就可以向服務器發起 HTTP 請求了,
4.服務器接受到這個請求后,根據路徑引數,經過后臺一些處理之后,把處理后的結果回傳給瀏覽器(把完整的HTML頁面代碼回傳給瀏覽器) 5.瀏覽器(客戶端)拿到了完整的HTML網頁代碼,瀏覽器內核和JS引擎就會開始決議和渲染這個頁面, 里面的JS,CSS,圖片等靜態資源也通過后續的HTTP請求進行加載 6.瀏覽器根據拿到的資源對頁面進行渲染,最終把完整的頁面呈現給用戶, 7.如果瀏覽器沒有后續的請求,那么就會跟服務器端發起 TCP 斷開(即四次揮手),
1.瀏覽器快取
瀏覽器快取(Browser Caching)是為了節約網路的資源加速瀏覽,瀏覽器在用戶磁盤上對最近請求過的檔案進行存盤, 當訪問者再次請求這個頁面時,瀏覽器就可以從本地磁盤顯示檔案,這樣就可以加速頁面的閱覽, ---百度百科 繼續上面的例子: 當我們再次使用edge打開bing搜索首頁時, edge優先搜索自身的DNS快取,找到https://cn.bing.com/的IP地址 然后重復上述步驟 若https://cn.bing.com/的完整HTML網頁和靜態資源已經在瀏覽器快取中(在上一次訪問中留下的資源,且未被洗掉), 那么直接進行加載, DNS快取,以及相關的網頁資源都屬于瀏覽器快取 根據這兩個例子,我們繼續學習: 2.什么是DNS? 域名系統(英文:Domain Name System,縮寫:DNS)是互聯網的一項服務, 它作為將域名和IP地址相互映射的一個分布式資料庫,能夠使人更方便地訪問互聯網, ----百度百科 結合上面的例子我們不難理解這個東西, 就像之前上線我自己的專案的時候,我的網站就是一串IP地址,然后我要去買一個域名, 這樣,別人就可以通過域名來訪問我的網站,而不是通過一串IP地址 www.baidu.com顯然比 111.426.125.789 更易讀
來自小米新域名價格曝光:簡直太土豪了-小米,新域名,交易,價格,曝光,土豪, ——快科技(驅動之家旗下媒體)--科技改變未來 (mydrivers.com)
那么域名到IP的決議,就是通過DNS來完成的
2.什么是http協議?
超文本傳輸協議(Hyper Text Transfer Protocol,HTTP)是一個簡單的請求-回應協議,它通常運行在TCP之上,
它指定了客戶端可能發送給服務器什么樣的訊息以及得到什么樣的回應,請求和回應訊息的頭以ASCII形式給出;
----百度百科
2.1.HTTP基礎概念
HTTP,全稱為 HyperText Transfer Protocol,即為超文本傳輸協議,
是互聯網應用最為廣泛的一種網路協議,所有的 www 檔案都必須遵守這個標準,
2.2.HTTP 特性:
- HTTP 是無連接無狀態的
- HTTP 一般構建于 TCP/IP 協議之上,默認埠號是 80
HTTP 可以分為兩個部分,即請求和回應,
HTTP 請求由三個部分構成,分別是:狀態行,請求頭,請求正文
HTTP 回應由類似的三個部分構成:狀態行,回應頭,回應正文
2.3.HTTP訊息結構
客戶端發送一個HTTP請求到服務器的請求訊息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求資料四個部分組成,下圖給出了請求報文的一般格式,

2.3.1.服務器回應訊息

(兩張都是在菜鳥偷的圖)
2.4.HTTP 請求方法:
HTTP 定義了在與服務器互動的不同方式,最常用的方法有 4 種,分別是 GET,POST,PUT, DELETE,
URL 全稱為資源描述符,可以這么認為:一個 URL 地址,對應著一個網路上的資源,而 HTTP 中的 GET,POST,PUT,DELETE 就對應著對這個資源的查詢,修改,增添,洗掉4個操作,
(哦,熟悉的增刪查改)
2.5.HTTP回應頭資訊
| 應答頭 | 說明 |
|---|---|
| Allow |
服務器支持哪些請求方法(如GET、POST等), |
| Content-Encoding |
檔案的編碼(Encode)方法,只有在解碼之后才可以得到Content-Type頭指定的內容型別,利用gzip壓縮檔案能夠顯著地減少HTML檔案的下載時間,Java的GZIPOutputStream可以很方便地進行gzip壓縮,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它,因此,Servlet應該通過查看Accept-Encoding頭(即request.getHeader("Accept-Encoding"))檢查瀏覽器是否支持gzip,為支持gzip的瀏覽器回傳經gzip壓縮的HTML頁面,為其他瀏覽器回傳普通頁面, |
| Content-Length |
表示內容長度,只有當瀏覽器使用持久HTTP連接時才需要這個資料,如果你想要利用持久連接的優勢,可以把輸出檔案寫入 ByteArrayOutputStream,完成后查看其大小,然后把該值放入Content-Length頭,最后通過byteArrayStream.writeTo(response.getOutputStream()發送內容, |
| Content-Type |
表示后面的檔案屬于什么MIME型別,Servlet默認為text/plain,但通常需要顯式地指定為text/html,由于經常要設定Content-Type,因此HttpServletResponse提供了一個專用的方法setContentType, |
| Date |
當前的GMT時間,你可以用setDateHeader來設定這個頭以避免轉換時間格式的麻煩, |
| Expires |
應該在什么時候認為檔案已經過期,從而不再快取它? |
| Last-Modified |
檔案的最后改動時間,客戶可以通過If-Modified-Since請求頭提供一個日期,該請求將被視為一個條件GET,只有改動時間遲于指定時間的檔案才會回傳,否則回傳一個304(Not Modified)狀態,Last-Modified也可用setDateHeader方法來設定, |
| Location |
表示客戶應當到哪里去提取檔案,Location通常不是直接設定的,而是通過HttpServletResponse的sendRedirect方法,該方法同時設定狀態代碼為302, |
| Refresh |
表示瀏覽器應該在多少時間之后重繪檔案,以秒計,除了重繪當前檔案之外,你還可以通過setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁面, |
| Server |
服務器名字,Servlet一般不設定這個值,而是由Web服務器自己設定, |
| Set-Cookie |
設定和頁面關聯的Cookie,Servlet不應使用response.setHeader("Set-Cookie", ...),而是應使用HttpServletResponse提供的專用方法addCookie,參見下文有關Cookie設定的討論, |
| WWW-Authenticate |
客戶應該在Authorization頭中提供什么型別的授權資訊?在包含401(Unauthorized)狀態行的應答中這個頭是必需的,例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\""), |
2.6.HTTP 狀態碼
HTTP 回應中包含一個狀態碼,用來表示服務器對客戶端回應的結果,
HTTP 狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的型別,
回應分為五類:資訊回應(100–199),成功回應(200–299),重定向(300–399),客戶端錯誤(400–499)和服務器錯誤 (500–599):
| 分類 | 分類描述 |
|---|---|
| 1** | 資訊,服務器收到請求,需要請求者繼續執行操作 |
| 2** | 成功,操作被成功接收并處理 |
| 3** | 重定向,需要進一步的操作以完成請求 |
| 4** | 客戶端錯誤,請求包含語法錯誤或無法完成請求 |
| 5** | 服務器錯誤,服務器在處理請求的程序中發生了錯誤 |
常見狀態碼:
| 100 | Continue | 繼續,客戶端應繼續其請求 |
| 101 | Switching Protocols | 切換協議,服務器根據客戶端的請求切換協議,只能切換到更高級的協議,例如,切換到HTTP的新版本協議 |
| 200 | OK | 請求成功,一般用于GET與POST請求 |
| 201 | Created | 已創建,成功請求并創建了新的資源 |
| 202 | Accepted | 已接受,已經接受請求,但未處理完成 |
| 300 | Multiple Choices | 多種選擇,請求的資源可包括多個位置,相應可回傳一個資源特征與地址的串列用于用戶終端(例如:瀏覽器)選擇 |
| 301 | Moved Permanently | 永久移動,請求的資源已被永久的移動到新URI,回傳資訊會包括新的URI,瀏覽器會自動定向到新URI,今后任何新的請求都應使用新的URI代替 |
| 302 | Found | 臨時移動,與301類似,但資源只是臨時被移動,客戶端應繼續使用原有URI |
| 400 | Bad Request | 客戶端請求的語法錯誤,服務器無法理解 |
| 401 | Unauthorized | 請求要求用戶的身份認證 |
| 402 | Payment Required | 保留,將來使用 |
| 403 | Forbidden | 服務器理解請求客戶端的請求,但是拒絕執行此請求 |
| 404 | Not Found | 服務器無法根據客戶端的請求找到資源(網頁),通過此代碼,網站設計人員可設定"您所請求的資源無法找到"的個性頁面 |
| 500 | Internal Server Error | 服務器內部錯誤,無法完成請求 |
| 501 | Not Implemented | 服務器不支持請求的功能,無法完成請求 |
| 502 | Bad Gateway | 作為網關或者代理作業的服務器嘗試執行請求時,從遠程服務器接收到了一個無效的回應 |
| 503 | Service Unavailable | 由于超載或系統維護,服務器暫時的無法處理客戶端的請求,延時的長度可包含在服務器的Retry-After頭資訊中 |
| 504 | Gateway Time-out | 充當網關或代理的服務器,未及時從遠端服務器獲取請求 |
| 505 | HTTP Version not supported | 服務器不支持請求的HTTP協議的版本,無法完成處理 |
(以上表格均來自菜鳥教程HTTP 教程 | 菜鳥教程 (runoob.com))
3.TCP是什么?
傳輸控制協議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于位元組流的傳輸層通信協議,由IETF的RFC 793 [1] 定義, TCP旨在適應支持多網路應用的分層協議層次結構, 連接到不同但互連的計算機通信網路的主計算機中的成對行程之間依靠TCP提供可靠的通信服務, TCP假設它可以從較低級別的協議獲得簡單的,可能不可靠的資料報服務, 原則上,TCP應該能夠在從硬線連接到分組交換或電路交換網路的各種通信系統之上操作, 傳輸控制協議(TCP,Transmission Control Protocol)是為了在不可靠的互聯網路上提供可靠的端到端位元組流而專門設計的一個傳輸協議, ----百度百科 所以這也是個,,,傳輸協議?,, 百度百科上說的太復雜了 我決定去菜鳥看3.1.瀏覽器與服務器都在使用 TCP/IP 協議
瀏覽器與服務器使用 TCP/IP 協議來鏈接因特網,
瀏覽器使用 TCP/IP 協議進入服務器,服務器使用 TCP/IP 協議來發送 HTML 到瀏覽器,
3.2.因特網地址是 TCP/IP 協議
因特網地址比如 "42.120.45.233" 就是一個 TCP/IP 協議,
3.3.IP地址
每個計算機必須有一個 IP 地址才能夠連入因特網,
每個 IP 包必須有一個地址才能夠發送到另一臺計算機,
在本教程下一節,您會學習到更多關于 IP 地址和 IP 名稱的知識,
3.4.IP 是無連接的
IP 用于計算機之間的通信,
IP 是無連接的通信協議,它不會占用兩個正在通信的計算機之間的通信線路,這樣,IP 就降低了對網路線路的需求,每條線可以同時滿足許多不同的計算機之間的通信需要,
通過 IP,訊息(或者其他資料)被分割為小的獨立的包,并通過因特網在計算機之間傳送,
IP 負責將每個包路由至它的目的地,
3.5.IP 路由器
當一個 IP 包從一臺計算機被發送,它會到達一個 IP 路由器,
IP 路由器負責將這個包路由至它的目的地,直接地或者通過其他的路由器,
在一個相同的通信中,一個包所經由的路徑可能會和其他的包不同,而路由器負責根據通信量、網路中的錯誤或者其他引數來進行正確地尋址,
3.6TCP/IP
TCP/IP 意味著 TCP 和 IP 在一起協同作業,
TCP 負責應用軟體(比如您的瀏覽器)和網路軟體之間的通信,
IP 負責計算機之間的通信,
TCP 負責將資料分割并裝入 IP 包,然后在它們到達的時候重新組合它們,
IP 負責將包發送至接受者,
3.7.建立連接
TCP是因特網中的傳輸層協議,使用三次握手協議建立連接,當主動方發出SYN連接請求后,等待對方回答SYN+ACK,并最終對對方的 SYN 執行 ACK 確認, 這種建立連接的方法可以防止產生錯誤的連接,TCP使用的流量控制協議是可變大小的滑動視窗協議, TCP三次握手的程序如下:- 客戶端發送SYN(SEQ=x)報文給服務器端,進入SYN_SENT狀態,
- 服務器端收到SYN報文,回應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態,
- 客戶端收到服務器端的SYN報文,回應一個ACK(ACK=y+1)報文,進入Established狀態,
3.8.連接終止
TCP是因特網中的傳輸層協議,使用四次揮手協議斷開連接(看不懂...) TCP四次揮手詳解_?oOoOoOooOO的博客-CSDN博客 參考文章: 1.網路基礎知識之 HTTP 協議 - 知乎 (zhihu.com) 2.百度百科_全球領先的中文百科全書 (baidu.com) 3.TCP三次握手詳解-深入淺出(有圖實體演示)_jun2016425的博客-CSDN博客 4.TCP/IP 教程 | 菜鳥教程 (runoob.com)轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551063.html
標籤:其他
上一篇:年薪70萬的全堆疊需要什么技能?
下一篇:返回列表
