前端必須掌握的知識之Http協議基礎以及發展進程

NO IMAGE

簡介

我們看一下MDN是如何介紹的:

HTTP是一種能夠獲取如 HTML 這樣的網絡資源的 protocol(通訊協議)。它是在 Web 上進行數據交換的基礎,是一種 client-server 協議,也就是說,請求通常是由像瀏覽器這樣的接受方發起的。一個完整的Web文檔通常是由不同的子文檔拼接而成的,像是文本、佈局描述、圖片、視頻、腳本等等。
MDN說http是一種在客戶端和服務器通過web進行數據交換的通訊協議。

前端必須掌握的知識之Http協議基礎以及發展進程

http協議在網絡七層協議中處於應用層,其中http協議是依賴傳輸層的tcp/ip協議實現的。http在請求之前需要進行三次握手來創建tcp連接,在連接上進行http傳輸。

http的版本

最初的http協議是0.9版本,這個版本的請求方法只有一個get方法,沒有header頭信息,服務器發送完畢就關閉tcp連接。
Http1.0版本:新增了post、put方法和響應狀態碼以及header頭信息,還有緩存等等。
Http1.1版本:持久連接(在以前的版本中客戶端向服務器發送Http請求收到響應後就會關閉tcp連接,持久連接就意味著服務器響應完畢後,連接依舊開啟)、pipeline(將多個請求一起發出,服務器一起響應回來,不過服務器需要按請求的順序依次響應)、增加了host使得可以在服務器上開啟多個服務。
Http2.0:數據以二進制的形式傳輸,在之前的版本數據是以字符串的形式傳輸,好處是在服務器不用按順序響應數據而可以同時去響應。頭信息壓縮:在之前的版本頭信息必須完整發送和返回,其中一些字段是以字符串形式保存,這樣會耗費帶寬,壓縮之後就可以節省帶寬。服務器推送功能:服務器可主動向客戶端推送數據。

三次握手

前端必須掌握的知識之Http協議基礎以及發展進程

http請求時基於tcp連接發送的,而創建tcp連接需要先進行三次握手來確保服務器收到了客戶端開啟連接的信息,以及客戶端收到服務端的開啟信息。為什麼是三次而不是兩次或者四次?如果只有兩次,那麼服務器返回給客戶端同意開啟連接的信息後,服務器不知道客戶端是否收到就直接開啟了連接端口,如果由於網絡問題客戶端沒有收到,那麼服務器就開啟了無用連接,浪費資源。

URI、URL、URN

URI:統一資源標誌符,資源在互聯網上所在的地方,我們可以通過地址獲得資源。 URI其實是包含URL和URN。
URL: 統一資源定位器。看個URL:user:[email protected]:80/path?query=… 其中包括協議(http)、用戶認證(user:[email protected]不過現在有別的方式了,把用戶信息放在URL不是很安全)、域名(host.com會通過dns解析成ip並定位資源在互聯網中的哪臺機器上)、端口(80,端口負責找到資源所在服務器上的某一個web服務。一般我們通常使用URL的時候都不會寫端口,但其實已經默認了為80端口)、路由(path,一個web服務可能存放了很多內容,可以通過路由找到某個內容)、搜索參數(請求的資源如何搜索、查找,現在的web服務用來傳遞參數)、哈希(hash是代表文檔的某一個片段)。
URN:永久統一資源定位符。在資源移動之後還是能找到。

http報文格式

前端必須掌握的知識之Http協議基礎以及發展進程

http是請求和響應的形式,請求方永遠是主動的。

請求報文

起始行:請求方法(get用來獲取數據、post用來提交數據、put更新數據、delete刪除數據,這些只是語義化的寫法,就算用post來獲取數據也是完全可以的,只不過顯得不規範)、路由(/test/hi-there.txt請求的域名是用來創建連接的時候使用,此時只需要知道請求的資源在服務器什麼地方就可以了)、http版本(HTTP/1.0)。

響應報文

起始行:http版本(HTTP/1.0)、響應狀態碼(200表示響應成功)

HTTP code

100~199:表示http請求要繼續進行;
200~299:表示請求是成功的;
300~399:表示重定向和緩存;
400~499:表示請求出現問題;
500~599:表示服務器的問題;
說一說常見的狀態碼:
200:請求處理成功;204:請求處理成功但資源沒有返回;206表示請求範圍資源響應報文裡包含了請求的範圍資源;301:永久重定向,表示資源已經被分配了新的地址;302臨時重定向,表示資源已經被分配了新的地址只不過臨時性的;304:該狀態是服務器告訴客戶端繼續使用緩存資源即可;400:表示請求報文出現了語法錯誤;401:表示用戶需要身份驗證。403:沒有訪問權限;404:找不到請求的資源;
500:表示服務器處理請求的時候發生了錯誤;503:表示服務器出現超負載或者在進行停機維護;

相關文章

Android獲取驗證碼自動填充

win7下基於nginx和ffmpeg的rtmp流媒體服務器搭建

Git用法初探

前端組件化演進之路