HTTP
響應常見狀態碼博文連接: 網絡知識面面觀
狀態碼 | 描述 |
---|---|
100-199 |
成功接收請求, 要求客戶端繼續提交下一次請求才能完成整個處理過程 |
200-299 |
成功接收請求並已完成整個處理過程,經常使用200 |
300-399 |
爲完成請求, 需進一步細化需求: 例如: 請求的資源已經移動一個新地址,經常使用302 (重定向),307 和304 (拿緩存) |
400-499 |
客戶端的請求有錯誤, 包含語法錯誤或者不能正確執行。 經常使用404 (請求的資源在web 服務器中沒有),403 (服務器拒絕訪問, 權限不夠) |
500-599 |
服務器端出現錯誤 |
200 |
表示一切正常, 返回的是正常請求結果 |
302/307 |
臨時重定向,指出請求的文檔已被臨時移動到別處, 此文檔的新的url 在location 響應頭中給出 |
304 |
未修改,表示客戶端緩存的版本是最新的, 客戶端應該繼續使用它 |
403 |
禁止,服務器理解客戶端請求,但拒絕處理它,一般用於服務器上文件或目錄的權限設置所致 |
404 |
找不到,服務器上不存在客戶端所請求的資源 |
500 |
服務器內部錯誤,服務器端的cgi ,asp ,jsp 等程序發生錯誤 |
TCP
三次握手和四次揮手創建TCP
鏈接須要三次握手:首先Client
端發送鏈接請求報文,Server
端接收鏈接後回覆ACK
報文,併爲此次鏈接分配資源。Client
端接收到 ACK
報文後也向Server
端發發送ACK
報文,並分配資源,這樣TCP
鏈接就創建了。git
TCP
先向服務器的TCP
發送一個鏈接請求報文。這個特殊的報文中不含應用層數據,其首部中的SYN
標誌位被置1
。另外, 客戶端會隨機選擇一個起始序號seq=x
(鏈接請求報文不攜帶數據,但要消耗掉一個序號)。TCP
收到鏈接請求報文後,若贊成創建鏈接,就向客戶端發送請求,併爲該TCP
鏈接分配TCP
緩存和變量。在確認報文中,SYN
和ACK
位都被置爲1
, 確認好字段的值爲x+1
,而且服務器隨機產生起始序號seq=y
(確認報文不攜帶數據, 但也要消耗掉一個序號)。確認報文一樣不包含應用層數據。ACK
標誌位被置爲1
,序號字段爲x+1
,確認號字段爲y+1
。四次揮手github
TCP
發送一個鏈接釋放報文,並中止再發送數據,主動關閉TCP
鏈接,該報文的FIN
標誌位被置1
,seq=u
,它等於前面已經傳送過的數據的最後一個字節的序號加1
(FIN
報文即便不攜帶數據,也要消耗掉一個序號)。ack=u+1
,這個報文本身的序號是v
,等於它前面已傳送過的數據的最後一個本身的序號加1
。此時,從客戶端到服務器這個方向的鏈接就釋放了,TCP
鏈接處於半關閉狀態。但服務器若發送數據,客戶端仍要接收,即從服務器到客戶機的鏈接仍未關閉。TCP
釋放鏈接,此時其發出FIN=1
的鏈接釋放報文。ACK
字段被置爲1
,確認號ack=w+1
,序號seq=u+1
。此時,TCP
鏈接尚未釋放掉,必須通過等待計時器設置的時間2MSL
後, A
才進入到鏈接關閉狀態。應用層(application-layer
)的任務是經過應用進程間的交互來完成特定網絡應用。應用層協議定義的是應用進程(進程:主機中正在運行的程序)間的通訊和交互的規則。對於不一樣的網絡應用須要不一樣的應用層協議。在互聯網中應用層協議不少,如域名系統DNS
,支持萬維網應用的HTTP
協議,支持電子郵件的SMTP
協議等等。咱們把應用層交互的數據單元稱爲報文。
域名系統web
域名系統(Domain Name System
縮寫DNS
,Domain Name
被譯爲域名)是因特網的一項核心服務,它做爲能夠將域名和IP
地址相互映射的一個分佈式數據庫,可以令人更方便的訪問互聯網,而不用去記住可以被機器直接讀取的IP
數串。
http
協議數據庫
超文本傳輸協議(HTTP
,HyperText Transfer Protocol
)是互聯網上應用最爲普遍的一種網絡協議。全部的WWW
(萬維網) 文件都必須遵照這個標準。
運輸層(
transport layer
)的主要任務就是負責向兩臺主機進程之間的通訊提供通用的數據傳輸服務。應用進程利用該服務傳送應用層報文。「通用的」是指並不針對某一個特定的網絡應用,而是多種應用可使用同一個運輸層服務。因爲一臺主機可同時運行多個線程,所以運輸層有複用和分用的功能。所謂複用就是指多個應用層進程可同時使用下面運輸層的服務,分用和複用相反,是運輸層把收到的信息分別交付上面應用層中的相應進程。
TCP
UDP
TCP
(Transmisson Control Protocol
)--提供面向鏈接的,可靠的數據傳輸服務。UDP
(User Datagram Protocol
)--提供無鏈接的,盡最大努力的數據傳輸服務(不保證數據傳輸的可靠性)。TCP
的主要特色後端
TCP
是面向鏈接的。(就好像打電話同樣,通話前須要先撥號創建鏈接,通話結束後要掛機釋放鏈接);TCP
鏈接只能有兩個端點,每一條TCP
鏈接只能是點對點的(一對一);TCP
提供可靠交付的服務。經過TCP
鏈接傳送的數據,無差錯、不丟失、不重複、而且按序到達;TCP
提供全雙工通訊。TCP
容許通訊雙方的應用進程在任什麼時候候都能發送數據。TCP
鏈接的兩端都設有發送緩存和接收緩存,用來臨時存放雙方通訊的數據;TCP
中的「流」(Stream
)指的是流入進程或從進程流出的字節序列。「面向字節流」的含義是:雖然應用程序和TCP
的交互是一次一個數據塊(大小不等),但TCP
把應用程序接下來的數據僅僅當作是一連串的無結構的字節流。UDP
的主要特色瀏覽器
UDP
是無鏈接的;UDP
使用盡最大努力交付,即不保證可靠交付,所以主機不須要維持複雜的連接狀態(這裏面有許多參數);UDP
是面向報文的;UDP
沒有擁塞控制,所以網絡出現擁塞不會使源主機的發送速率下降(對實時應用頗有用,如直播,實時視頻會議等);UDP
支持一對1、一對多、多對一和多對多的交互通訊;UDP
的首部開銷小,只有8
個字節,比TCP
的20
個字節的首部要短。TCP/IP
體系結構中,因爲網絡層使用IP
協議,所以分組也叫IP
數據報 ,簡稱數據報。heterogeneous
)網絡經過路由器(router
)相互鏈接起來的。互聯網使用的網絡層協議是無鏈接的網際協議(Intert Prococol
)和許多路由選擇協議,所以互聯網的網絡層也叫作網際層或IP
層。data link layer
)一般簡稱爲鏈路層。兩臺主機之間的數據傳輸,老是在一段一段的鏈路上傳送的,這就須要使用專門的鏈路層的協議。 在兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層接下來的IP
數據報組裝成幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。physical layer
)的做用是實現相鄰計算機節點之間比特流的透明傳送,儘量屏蔽掉具體傳輸介質和物理設備的差別。使其上面的數據鏈路層沒必要考慮網絡的具體傳輸介質是什麼。「透明傳送比特流」表示經實際電路傳送後的比特流沒有發生變化,對傳送的比特流來講,這個電路好像是看不見的。TCP/IP
兩個協議。HTTP
與HTTPS
的區別HTTP
協議運行在TCP
之上,明文傳輸,客戶端與服務器端都沒法驗證對方的身份;HTTPS
是身披SSL
(Secure Socket Layer
)外殼的HTTP
,運行於SSL
上,SSL
運行於TCP
之上,是添加了加密和認證機制的HTTP
。兩者之間存在以下不一樣:緩存
HTTPS
與HTTP
使用不一樣的鏈接方式,用的端口也不同,前者是80
,後者是443
;HTTP
通訊相比,HTTPS
通訊會因爲加減密處理消耗更多的CPU
和內存資源;HTTPS
通訊須要證書,而證書通常須要向認證機構購買;HTTPS
的加密機制是一種共享密鑰加密和公開密鑰加密並用的混合加密機制。TCP
協議如何保持傳輸的可靠性TCP
提供一種面向鏈接的、可靠的字節流服務。其中,面向鏈接意味着兩個使用TCP
的應用(一般是一個客戶和一個服務器)在彼此交換數據以前必須先創建一個TCP
鏈接。在一個TCP
鏈接中,僅有兩方進行彼此通訊;而字節流服務意味着兩個應用程序經過TCP
連接交換8bit
字節構成的字節流,TCP
不在字節流中插入記錄標識符。
對於可靠性,TCP
經過如下方式進行保證:安全
TCP
發送數據端超時後會重發數據;TCP
報文段做爲IP
數據報來傳輸,而IP
數據報的到達可能會失序,所以TCP
報文段的到達也可能會失序。TCP
將對失序數據進行從新排序,而後才交給應用層;TCP
收到發自TCP
鏈接另外一端的數據,它將發送一個確認。這個確認不是當即發送,一般將推遲幾分之一秒;TCP
發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。若是不能及時收到一個確認,將重發這個報文段;TCP
鏈接的每一方都有固定大小的緩衝空間。TCP
的接收端只容許另外一端發送接收端緩衝區所能接納的數據,這能夠防止較快主機導致較慢主機的緩衝區溢出,這就是流量控制。TCP
使用的流量控制協議是可變大小的滑動窗口協議。IP
地址
這一步包括
DNS
具體的查找過程,包括:瀏覽器緩存->系統緩存->路由器緩存...
DNS
緩存(維護一張域名與IP
地址的對應表);DNS
緩存(維護一張域名與IP
地址的對應表);hosts
文件( Windows
環境下,維護一張域名與IP
地址的對應表);操做系統將域名發送至LDNS
(本地區域名服務器),LDNS
查詢本身的DNS
緩存(通常查找成功率在80%
左右),查找成功則返回結果,失敗則發起一個迭代DNS
解析請求:服務器
LDNS
向 Root Name Server
(根域名服務器,如com
、net
、org
等的解析的頂級域名服務器的地址)發起請求,此處,Root Name Server
返回com
域的頂級域名服務器的地址;LDNS
向com
域的頂級域名服務器發起請求,返回baidu.com
域名服務器地址;LDNS
向baidu.com
域名服務器發起請求,獲得www.baidu.com
的IP
地址;LDNS
將獲得的IP
地址返回給操做系統,同時本身也將IP
地址緩存起來;IP
地址返回給瀏覽器,同時本身也將IP
地址緩存起來。URL
到頁面加載發生了什麼整體來講分爲如下幾個過程:cookie
DNS
解析TCP
鏈接HTTP
請求HTTP
報文HTTP
的幾種請求方法的用途GET
方法:發送一個請求來取得服務器上的某一資源POST
方法:向URL
指定的資源提交數據或附加新的數據PUT
方法:跟POST
方法很像,也是向服務器提交數據。可是,它們之間有不一樣。PUT
指定了資源在服務器上的位置,而POST
沒有HEAD
方法:只請求頁面的首部DELETE
方法:刪除服務器上的某資源OPTIONS
方法:它用於獲取當前URL
所支持的方法。若是請求成功,會有一個Allow
的頭包含相似「GET
,POST
」這樣的信息TRACE
方法:TRACE
方法被用於激發一個遠程的,應用層的請求消息迴路CONNECT
方法:把請求鏈接轉換到透明的TCP/IP
通道IP
地址的範圍IP
地址分爲A
,B
,C
,D
,E
五類。
其中A
類分配給政府機關使用,B
類地址給大中型企業使用,C
類地址給我的使用。這三種是主要的。
IP
地址分爲五類,A
類保留給政府機構,B
類分配給中等規模的公司,C
類分配給任何須要的人,D
類用於組播,E
類用於實驗,各種可容納的地址數目不一樣。
其中A
類、B
類、和C
類這三類地址用於TCP/IP
節點,其它兩類D
類和E
類被用於特殊用途。A
、B
、C
三類IP
地址的特徵:當把IP
地址寫成二進制形式時,A
類地址的第一位老是0
,B
類地址的前兩位老是10
,C
類地址的前三位老是110
。
A
類地址
A
類地址第1
字節爲網絡地址,其它3
個字節爲主機地址。A
類地址範圍:1.0.0.1
—126.155.255.254
A
類地址中的私有地址和保留地址:
10.X.X.X
是私有地址(所謂的私有地址就是在互聯網上不使用,而被用在局域網絡中的地址)127.X.X.X
是保留地址,用作循環測試用的B
類地址
B
類地址第1
字節和第2
字節爲網絡地址,其它2
個字節爲主機地址。B
類地址範圍:128.0.0.1
—191.255.255.254
。B
類地址的私有地址和保留地址:
172.16.0.0
—172.31.255.255
是私有地址169.254.X.X
是保留地址。若是你的IP
地址是自動獲取IP
地址,而你在網絡上又沒有找到可用的DHCP
服務器。就會獲得其中一個IP
C
類地址
C
類地址第1
字節、第2
字節和第3
個字節爲網絡地址,第4
個個字節爲主機地址。另外第1
個字節的前三位固定爲110
。C
類地址範圍:192.0.0.1
—223.255.255.254
。C
類地址中的私有地址:
192.168.X.X
是私有地址。D
類地址
D
類地址不分網絡地址和主機地址,它的第1
個字節的前四位固定爲1110
。D
類地址範圍:224.0.0.1
—239.255.255.254
E
類地址
E
類地址也不分網絡地址和主機地址,它的第1
個字節的前五位固定爲11110
。E
類地址範圍:240.0.0.1
—255.255.255.254
HTTP
長鏈接、短鏈接HTTP/1.0
中默認使用短鏈接。也就是說,客戶端和服務器每進行一次HTTP
操做,就創建一次鏈接,任務結束就中斷鏈接。當客戶端瀏覽器訪問的某個HTML
或其餘類型的Web
頁中包含有其餘的Web
資源(如JavaScript
文件、圖像文件、CSS
文件等),每遇到這樣一個Web
資源,瀏覽器就會從新創建一個HTTP
會話。HTTP/1.1
起,默認使用長鏈接,用以保持鏈接特性。使用長鏈接的HTTP
協議,會在響應頭加入這行代碼:Connection:keep-alive
HTTP
數據的TCP
鏈接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經創建的鏈接。Keep-Alive
不會永久保持鏈接,它有一個保持時間,能夠在不一樣的服務器軟件(如Apache
)中設定這個時間。實現長鏈接須要客戶端和服務端都支持長鏈接。HTTP
協議的長鏈接和短鏈接,實質上是TCP
協議的長鏈接和短鏈接。HTTP
協議是無狀態的HTTP
協議是無狀態的,指的是協議對於事務處理沒有記憶能力,服務器不知道客戶端是什麼狀態。也就是說,打開一個服務器上的網頁和上一次打開這個服務器上的網頁之間沒有任何聯繫。HTTP
是一個無狀態的面向鏈接的協議,無狀態不表明HTTP
不能保持TCP
鏈接,更不能表明HTTP
使用的是UDP
協議(無鏈接)。
HTTP
協議之間的關係Socket
鏈接與HTTP
鏈接的聯繫與區別Socket
鏈接就是TCP
鏈接,所以Socket
鏈接一旦創建,通訊雙方便可開始相互發送數據內容,直到雙方鏈接斷開。但在實際網絡應用中,客戶端到服務器之間的通訊每每須要穿越多箇中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的鏈接而致使Socket
鏈接斷連,所以須要經過輪詢告訴網絡,該鏈接處於活躍狀態。HTTP
鏈接使用的是「請求—響應」的方式,不只在請求時須要先創建鏈接,並且須要客戶端向服務器發出請求後,服務器端才能回覆數據。Socket
鏈接,服務器就能夠直接將數據傳送給客戶端;若雙方創建的是HTTP
鏈接,則服務器須要等到客戶端發送一次請求後才能將數據傳回給客戶端,所以,客戶端定時向服務器端發送鏈接請求,不只能夠保持在線,同時也是在「詢問」服務器是否有新的數據,若是有就將數據傳給客戶端。HTTP
(TCP
) 報文結構例如一個100kb
的HTML
文檔須要傳送到另一臺計算機,並不會整個文檔直接傳送過去,可能會切割成幾個部分,好比四個分別爲25kb
的數據段。而每一個數據段再加上一個TCP
首部,就組成了TCP
報文。TCP
報文 (Segment
),包括首部和數據部分。
首部:
source port
destination port
sequence number
acknowledgment number
offset
reserved
tcp flags
window size
checksum
urgent pointer
tcp options
HTTP
的緩存機制HTTP
的緩存主要利用header
裏的兩個字段來控制:
Cache-control
主要包含以及幾個字段:
private
:則只有客戶端能夠緩存public
:客戶端和代理服務器均可以緩存max-age
:緩存的過時時間no-cache
:須要使用對比緩存來驗證緩存數據no-store
:全部內存都不會進行緩存ETag
:即用來進行對比緩存,Etag
是服務端資源的一個標識碼
Etag
,下次再請求時,客戶端則會經過header
裏的If-None-Match
將這個標識碼Etag
帶上,服務端將客戶端傳來的Etag
與最新的資源Etag
作對比,若是同樣,則表示資源沒有更新,返回304
。經過Cache-control
和Etag
的配合來實現HTTP
的緩存機制。
Cookie
Cookie
就是用來在本地緩存記住一些狀態的,一個Cookie
通常都包含domain
(所屬域)、path
、Expires
(過時時間)等幾個屬性。服務端能夠經過在響應頭set-cookies
將狀態寫入客戶端的Cookie
中。
HTTP 2.0
與HTTP 1.x
相比有什麼優勢HTTP 1.x
是文本協議,而HTTP 2.0
是二進制以幀爲基本單位,是一個二進制協議,一幀中除了包含數據外同時還包含該幀的標識:Stream Identifier
,即標識了該幀屬於哪一個request
,使得網絡傳輸變得十分靈活。多路複用: 一個很大的改進,原先HTTP 1.x
一個鏈接一個請求的狀況有比較大的侷限性,也引起了不少問題,如創建多個鏈接的消耗以及效率問題。
HTTP 1.x
爲了解決效率問題,可能會盡可能多的發起併發的請求去加載資源,然而瀏覽器對於同一域名下的併發請求有限制,而優化的手段通常是將請求的資源放到不一樣的域名下來突破這種限制。HTTP 2.0
支持的多路複用能夠很好的解決這個問題,多個請求共用一個TCP
鏈接,多個請求能夠同時在這個TCP
鏈接上併發,一個是解決了創建多個TCP
鏈接的消耗問題,一個也解決了效率的問題。那麼是什麼原理支撐多個請求能夠在一個TCP
鏈接上併發呢?基本原理就是上面的二進制分幀,由於每一幀都有一個身份標識,因此多個請求的不一樣幀能夠併發的無序發送出去,在服務端會根據每一幀的身份標識,將其整理到對應的request
中。header
頭部壓縮:主要是經過壓縮header
來減小請求的大小,減小流量消耗,提升效率。由於以前存在一個問題是,每次請求都要帶上 header
,而這個header
中的數據一般是一成不變的。流量控制是對一條通訊路徑上的流量進行控制,就是發送方經過獲取接收方的回饋來動態調整發送的速率,來達到控制流量的效果,其目的是保證發送者的發送速度不超過接收者的接收速度。
擁塞控制是對整個通訊子網的流量進行控制,屬於全局控制。
快重傳+快恢復
3
個重複的接收方的ACK
,就能夠判斷有報文段丟失,此時就能夠當即重傳丟失的報文段,而不用等到設置的超時時間到了纔開始重傳,提升了重傳的效率。1
,從新慢開始,這樣存在的一個問題就是網絡沒法很快恢復到正常狀態。快恢復就是來優化這個問題的,使用快恢復,則出現擁塞時,擁塞窗口只會下降到新的慢開始門閥值(即12
),而不會降爲1
,而後直接開始進入擁塞避免加法增加。原文連接: 先後端均適用的網絡知識點大全