在當前大前端的環境下,前後端分離,前後端同構等開發協同的工作模式的出現,對前端的要求越來越高,前端需要懂得的知識面也越來越廣,經常會有朋友在面試的時候被問到,在瀏覽器輸入一個連結到瀏覽器顯示整個網頁內容發生的一些列過程,那麼這個過程就脫離不開我們今天要分享的HTTP請求了!也有很多同學在和後端同學在協調前後端api介面的時候前端同學老是處於下分,今天這個系列能讓前端的同學重回巔峰(稍微有點誇張哈哈)。
http誕生了
在深入學習之前我們來了解一下他的背景,同時瞭解一下當時制定http的初衷,這樣有助於我們更好的理解。
為知識共享而規劃的web
在1989年3月,網際網路還只屬於少數人,在網際網路的前期,http誕生了。
CERN(歐洲核子研究組織)的蒂姆·博納斯-李博士提出了一種能讓遠隔兩地的研究者們共享知識的設想。
最初的設想是藉助多文件之間相互關聯形成的超文字(HyperText).連結可相互參閱的www(就是我們俗稱的全球資訊網)。
www這一名稱,是web瀏覽器當年用來瀏覽超文字的客戶端應用程式的名稱。
Web的成長時代
1990年11月,CERN成功研發了世界上第一臺Web伺服器和Web瀏覽器。(小編那時候還沒出生?)
1993年1月,現代瀏覽器的祖先NCSA(美國國家超級計算機應用中心)研發的Mosaic問世。它以in-line(內聯)的形式顯示html的影象,在影象方面出色的表現使它迅速在世界範圍內流行起來。
1995年微軟公司釋出Internet Explorer 1.0 和 2.0 緊隨其後的是現在已然成為Web伺服器標準之一的Apache,當時它以Apache 2.0 的姿態出現在世人眼前。HTML也釋出了2.0版本。哪一年Web技術發展突飛猛進。
時光飛逝,在1995年左右,微軟公司與網景公司之間爆發瀏覽器大戰,兩家公司都各自對HTML做了擴充套件,於是導致在編寫HTML頁面的時候,必須考慮相容他們兩家公司的瀏覽器,時至今日,這個問題仍讓令我們這些前端工程師棘手。
在這場瀏覽器供應商之間的競爭中。他們不僅對當時發展中的各種web標準化視而不見。還屢次出現新增功能,沒有對應的說明文件的情況。
2000年前後這場瀏覽器戰爭,隨著網景通訊公司的衰落而暫告一段落。但是在2004年,Mozila基金會發布了Firefox(火狐)瀏覽器,第二次瀏覽器大戰隨即爆發。
Internet Exprlorer 瀏覽器的版本從6到7前後花費了5年時間,之後連續不斷髮布了8,9,10版本。另外Chrome,Opera,Safari等瀏覽器也紛紛搶佔市場份額。
駐足不前的HTTP
HTTP/0.9
HTTP於1990年問世,但是的HTTP並沒有作為正式的標準被建立。這時的HP其實還有HTTP/1.0之前版本的意思,因此被稱為HTTP/0.9。
HTTP/1.0
HTTP正是作為標準被公佈,是在1996年的五月版本被命名為HTTP1.0N記載於RFC1945,雖說是初七標準,但該協議標準至今仍被廣泛使用,在伺服器端。
HTTP/1.1
1997年1月公佈的HTTP1.1是目前主流的HTTP協議版本,當初的標準是RFC2068之後釋出的修訂版RFC2616是當前的最新版本
HTTP/2.0
在2010年到2015年,谷歌通過實踐了一個實驗性的SPDY協議,證明了一個在客戶端和伺服器端交換資料的另類方式。其收集了瀏覽器和伺服器端的開發者的焦點問題。明確了響應數量的增加和解決複雜的資料傳輸,SPDY成為了HTTP/2協議的基礎。
在2015年5月正式標準化後,HTTP/2取得了極大的成功,在2016年7月前,8.7%的站點已經在使用它,代表超過68%的請求。高流量的站點最迅速的普及,在資料傳輸上節省了可觀的成本和支出。
網路基礎TCP/IP
為了瞭解HTTP,我們有必要事先了解一下TCP/IP協議族,通常使用的網路。是在TCP/IP協議族的基礎上運作的,兒HTTP,屬於它內部的一個子集。
TCP/IP協議族
計算機與網路裝置要相互通訊。雙方就必須基於相同的方法,比如,如何探測到通訊目標,由哪一邊先發起通訊,使用哪種語言進行通訊,怎麼結束通訊等規則都需要事先確定,不同的硬體,作業系統之間的通訊,所有的這一切都需要一種規則,而我們就把這種規則稱為協議。
協議中存在各種各樣的內容,從電纜的規格到IP地址的選定方法,尋找異地使用者的方法,雙方建立通訊的順序以及握把頁面顯示需要處理的步驟等等。像這樣把網際網路。相關聯的協議集合起來總稱為TCP/IP,也有說法認為TCP/IP是指TCP和IP種協議,還有一種說法認為,TCP/IP是在IP協議的通訊過程中使用到協議族的統稱.
TCP/IP的分層管理
把TCP/IP層次化是有好處的。比如,如果網際網路只有一個協議統籌,某個地方需要改變,設計師就必須把所有部分整體替換掉,而分層之後只需把變動的成替換掉即可。把各層之間的介面部分規劃好以後。每個層次內部的設計就變得自由改動。值得一提的是,層次化以後。設計也變得相對簡單了,處於應用層上的應用可以只考慮分配給自己的任務,而不需要弄清對方在地球的哪一個地方,對方的傳輸路線是怎樣的,是否能確保傳輸達。等問題。
1、應用層
應用層決定了向使用者提供應用服務時通訊的活動,TCP/IP協議組內記憶體的各類通訊通用的應用服務,比如。FTP和DNS。服務就是其中兩類HTTP協議也處於該層
2、傳輸層
傳輸層,對上層應用程。提供處於網路連線中的兩臺計算機之間的資料傳輸。在傳輸層有兩個性質不同的協議,TCP和UDP 3、網路層
網路層用來處理在網路上流動的資料包,資料包是網路傳輸的最小資料單位,該成規定的通過怎樣的路徑。所謂的傳輸路線,到達對方計算機,並把資料包傳送給對方。與對方計算機之間通過多臺計算機或網路裝置進行傳輸時,網路層所起的作用就是在眾多的選項,那選擇一條傳輸路線
4、鏈路層
用來處理連結網路的硬體部分,包括控制作業系統,硬體的裝置驅動。NC。以及光纖等物理可見部分。硬體上的範疇均在鏈路層的作用範圍之內
TCP/IP通訊傳輸流
利用TCP/IP協議族進行網路通訊時,會通過分層順序與對方進行通訊傳送端從應用層往下走,接收端則從鏈路層往上走,我們用HTTP,舉例來說明。首先作為傳送端的客戶端在應用層(HTTP協議)發出一個想看某個Web頁面的HTTP請求。接著為了傳輸方便,在傳輸層TCP協議,把從應用層處收到的資料HTTP請求報文進行分割,並在各個報文上打上標記序號及埠號轉發給網路層。
在網路層,IP協議增加作為通訊目的地的Mac地址。後轉發給鏈路層,這樣一來,發往網路的通訊請求就準備齊全了。
接收端的伺服器在鏈路層接收到資料,按順序往上層傳送。一直到應用層,當傳輸到應用層,才能算真正接收到有客戶端發過來的HTTP請求。 傳送端在層與層之間傳輸資料時,每經過一層時,必定會打上一個改成所屬的首部資訊,反之,接收端在層與層傳輸資料時,每經過一層是會把對應的手不消去。這種資料行銷資訊包裝起來的做法成為封裝
與HTTP關係密切的協議。IP、TCP和DNS
下面我們分別針對TCP/IP協議組中與HTTP密不可分的三個協議,IP、TCP和DNS進行說明
負責傳輸的IP協議
按層次分,IP網路協議位於網路層。Internet protoct這個名稱可能聽起來有點誇張。但事實正是如此,因為幾乎所有使用網路的系統都會用到IP協議,TCP/IP協議族中的IP指的就是晚期協議,協議名稱中佔據了一半位置,其重要性可見一斑,可能有人會把IP和IP地址搞混,IP其實是一種協議的名稱
IP協議的作用是把各種資料包傳送給對方,而要保證傳送到對方那裡,則需要滿足各類條件,其中兩個重要的條件是IP地址和Mac地址
IP地址指明瞭節點被分配到的地址,Mac地址是指網路卡所屬的固定地址,IP地址可以和Mac地址進行配對,IP地址可變化,但mac基本上不會更改。
1、使用ARP協議,憑藉MAC地址進行通訊
IP間的通訊依賴Mac地址。在網路上,通訊的雙方在同一區域網內的情況是很少的,通常是經過多臺計算機和網路裝置中轉才能連線到對方,而在進行中轉時,會利用下一站中轉裝置的Mac地址來搜尋下一個中轉目標,這時會採用ARP協議,ARP是一種用以解析地址的協議。根據通訊方的地址,IP地址就可以反查出對應的MAC地址。
2、沒有人能夠全面掌握網際網路中的傳輸狀狀況
在達到通訊目標前的中轉過程中,那些計算機和路由器等網路裝置只能獲悉,很粗略的傳輸路線。
這種機制稱為路由選擇,有點像快遞公司的送貨過程,想要寄快遞的人,只要將自己的貨物送到集散中心,就可以知道快遞公司是否肯收件發貨,該快遞公司的集散中心檢查貨物的送達地址,明確下賬該送完哪個區的集散中心,接著那個區域的集散中心智慧判斷。是否能送到對方的家中。
我們是想通過這個比喻說明,無論哪臺計算機那臺網路裝置,他都無法全面掌握網際網路中的細節。
確保可靠性的TCP協議
所謂的位元組流服務是指為了方便傳輸,將大塊資料分割成以報文段為單位的資料包進行管理,而可靠的傳輸服務是指能夠把這些資料準確可靠地傳給對方,一言以敝之TCP協議,為了更容易傳送大資料,才把資料進行分割,而且TCP協議能夠。確認資料最終是否。送達到對方。
確保資料等到達目標
為了準確無誤的將資料送達目標處,TCP協議採用了三次握手特點,用TCP協議把資料包送出去以後,TCP不會對傳送後的情況置之不理,他一定會向對方確認是否成功送達。握手過程中使用了TCP的標誌。SYN和ACK傳送端首先傳送一個帶SYN標誌的資料包給對方接收,單收到後回傳一個帶有SYN/ACK 的標誌的資料包已是傳達確認資訊,最後傳送端再回傳一個帶有ACK 標誌的資料包代表握手結束。若握手過程中某個階段莫名中斷,TCP協議會再次以相同的順序傳送相同的資料包
除勒上述三次握手,TCP協議,還有其他各種手段來保證通訊的可靠性。
負責域名解析的DNS服務
DNS服務適合TPHP鞋一樣位於應用層的協議,它提供域名到IP地址之間的解析服務
計算機系可以被賦予IP地址,也可以被賦予主機名和域名,比如 www.google.com
使用者通常使用主機名或域名來訪問對方的計算機,而不是直接通過IP地址訪問,因為與IP地址的一組純數字相比,用字母配合數字的表示形式來指定計算機名,更符合人類的記憶習慣。但是讓計算機去理解民生,相對而言就變得困難了,因為計算機更擅長處理一長串數字,為了解決上述的問題,DNS服務應運而生,DNS協議提供通過域名查詢IP地址或逆向同IP地址反查域名的服務。
URI和URL
與URI(統一資源識別符號)相比,我們更熟悉URL(統一資源定位符)。URL正式使用瀏覽器等訪問web頁面時,需要輸入的網頁地址。看到下圖
URI用字串標識某一網際網路資源。而URL表示資源的地點。網際網路上所處的位置,可見URI是URL的子集。URI格式
表示指定的URL。要使用涵蓋全部必要資訊的絕對URI,絕對URL以及相對URL相對URL,是指從瀏覽器中基本UI處指定的URL。我們現在瞭解一下絕對URL的格式
1、登入資訊認證指定使用者名稱和密碼作為從服務端獲取資源是必要的,登入資訊,身份證此項是可選項
2、伺服器地址
絕對的UI必須指定在訪問的伺服器地址,地址可以是類似這種DNS解析的名稱或者是。192.168.101這類IPv4地址名
3、伺服器埠號
指定伺服器連線的網路埠號,此項也是可選項,若使用者省省略,則自動使用預設埠號
4、帶層次的檔案路徑
指定伺服器上的檔案路徑來定位特指的資源,這語音系統的檔案目錄結構相似
5、查詢查詢字串
針對一指定的檔案,路徑內的資源可以使用查詢字串傳入任意引數時,選可選
6、片段識別符號
使用片段識別符號通常可以標記出已獲取資源中的資源資源,文件內的某個位置,但在FC中並沒有明確規定其使用方法,該項也為可選項。
前端必知必會HTTP請求系列(一)瞭解Web及網路基礎
前端必知必會HTTP請求系列(二)簡單一點的HTTP協議
前端必知必會HTTP請求系列(三)HTTP,報文內部的HTTP資訊
前端必知必會HTTP請求系列(四)返回結果的HTTP狀態碼
前端必知必會HTTP請求系列(五)與HTTP協作的web伺服器
前端必知必會HTTP請求系列(六)HTTP的首部
前端必知必會HTTP請求系列(七)確保Web安全的HTTPS
前端必知必會HTTP請求系列(八)確認訪問使用者身份的認證
前端必知必會HTTP請求系列(九)基於HTTP的功能追加協議
前端必知必會HTTP請求系列(十)構建Web內容的技術
前端必知必會HTTP請求系列(十一)Web攻擊技術
有什麼問題可以到評論區留言,持續關注,不斷更新!