學習HTTP相關知識筆記

HTTP相關知識

1.HTTP的概念

超文本傳輸協議(HTTP)是用于傳輸諸如HTML的超媒體文檔的應用層協議。它被設計用于Web瀏覽器和Web服務器之間的通信,但它也可以用于其他目的。HTTP遵循經典的客戶端-服務端模型,客戶端打開一個連接以發出請求,然后等待它收到服務器端響應。HTTP是無狀態協議,意味著服務器不會在兩個請求之間保留任何數據(狀態)。雖然通常基于TCP / IP層,但可以在任何可靠的傳輸層上使用

2.URL和URI

  • URI:uniform resource identifier 統一資源標識符,一種資源的標識,它是一種抽象的資源標識,即可以是相對的,也可以是絕對的。
  • URL:uniform resource location 統一資源定位符,一用來標識抽象或物理資源的一個緊湊字符串。

3.HTTP報文

HTTP報文由報文首部、空行、報文主體構成:

其中的空行用于區分報文首部和報文主體內容,是由一個回車符和一個換行符組成的。
無論是請求報文還是響應報文都需要有報文首部,而報文主體有些請求報文是沒有的。而請求報文的一般格式如下:

而響應報文的格式是這樣的:


其中最常見的屬性如下:

  1. URL, 即http訪問的地址
  2. request method, 報文的請求方式
  3. status code, 狀態碼以及狀態短語
  4. Accept Encoding, 內容編碼
  5. Connection, 連接方式
  6. Cookie, 添加的cookie內容
  7. Host, 目標主機
  8. User-Agent, 客戶端瀏覽器的相關信息
  9. Set-Cookie, 指定想要在Cookie中保存的內容

請求方式(request method)——常見GETPOST

GET方法可以用來請求訪問已經被URL識別的資源。指定的資源經過服務端解析后返回響應的內容。簡單來說,就是請求的資源是文本的話,那么就保持原樣返回。

POST方法可以用來傳輸實體的主體。

兩者區別:

1.使用目標不同

POSTGET都用于獲取信息,但是GET方式僅僅是查詢,并不對服務器上的內容產生任何作用結果;每次GET的內容都是相同的。POST則常用于發送一定的內容進行某些修改操作。

2.大小不同

由于不同的瀏覽器對URL的長度大小有一定的字符限制,因此由于GET方式放在URL的首部中,具體的大小要依瀏覽器而定。POST方式則是把內容放在報文內容中,因此只要報文的內容沒有限制,它的大小就沒有限制。

3.安全性不同

上面也說了GET是直接添加到URL后面的,直接就可以在URL中看到內容。而POST是放在報文內部的,用戶無法直接看到。

總的來說,GET用于獲取某個內容,POST用于提交某種數據請求,從使用場景來看,一般用戶注冊的內容是私密的,應該使用POST方式來保持私密,而當需要查詢某個內容時,需要快速響應,則使用GET。

常見status code狀態碼

200 通常的成功 OK
GET:請求的對應資源會作為響應返回。響應將包含描述或操作的結果。
POST:返回處理對應請求的結果

204 成功處理請求,沒有返回任何內容 No Content
表示服務器接收到的請求已經處理完畢,但是服務器不需要返回響應。比如,客戶端是瀏覽器的話,那么瀏覽器顯示的頁面不會發生更新。

206 Partial Content
成功處理了部分GET請求

301 Moved Permanently
請求的網頁已永久移動到新位置,永久性重定向

302 Found
網站臨時性重定向,暫時不能訪問(備案、被查)

303 See Other
該狀態碼表示由于請求對應的資源存在另一個URI,并指定必須使用GET方法定向獲取請求的資源。和302不同的是,302是不會改變上次的請求方法

304 Not Modified
訪問不了,并返回和上次一樣的話,表示資源未被修改過,還是和上次訪問時一樣。

307 Temporary Redirect
臨時重定向,和302303類似,不同的是,不會指定客戶端要用什么樣的方法請求,

400 Bad Request
表示客戶端中存在語法錯誤,導致服務器無法理解該請求。客戶端需要修改請求的內容后再次發送請求。

401 Unauthorized
即用戶沒有必要的憑據。該狀態碼表示當前請求需要用戶驗證。

403 Forbidden
服務器已經理解請求,但是拒絕執行它。

404 Not Found
服務器找不到請求的網頁。

500 Internal Server Error
服務器遇到錯誤,無法完成請求。

503 Service Unavailable
由于臨時的服務器維護或者過載,服務器當前無法處理請求。這個狀況是暫時的.

內容編碼 Accept Encoding

由于有些報文的內容會過大,為了減少傳輸時間,HTTP會采取一些壓縮的措施,例如上面的報文信息中,Accept-Encoding就定義了內容編碼的格式gzip。

總的來說內容編碼的格式有以下幾種:
gzip:GNU壓縮格式
compress:UNIX系統的標準壓縮格式
deflate:是一種同時使用了LZ77和哈夫曼編碼的無損失壓縮格式
identity:不進行壓縮
持久化connection

正常發送HTTP時,我們需要建立TCP的連接,然后再發送報文:

如果每次都要發送HTTP報文都需要經歷上面的拿過過程,無疑將會耗費很多時間在建立和斷開連接的過程中,因此HTTP使用了connection屬性,用于指定連接的方式,當當設置成keep-alive時,就會建立一條持久化的連接。這樣就不需要每次都建立連接在中斷連接:

HTTP1.1connection默認開啟keep-alive
報文首部總結

4.HTTP方法

HTTP支持幾種不同的請求命令,這些命令被稱為 HTTP 方法(HTTP method)。每 條 HTTP 請求報文都包含一個方法。這個方法會告訴服務器要執行什么動作(獲取 一個 Web 頁面、運行一個網關程序、刪除一個文件等)。

下表是一些常見的HTTP方法:

PUT傳輸文件

PUT方法用于傳輸文件,就像FTP協議的上傳一樣,要求在請求報文的主題中包含文件內容,然后保存到請求URI指定的位置。由于PUT方法不帶驗證機制,任何人都可以任何人都可以上傳文件,存在安全性問題,因此一般的web網站不適用該方法。

DELETE刪除文件

DELETE方法用來刪除文件,是與put相反的方法,DELETE方法按照請求url刪除指定的資源。其本質和PUT方法一樣不帶驗證機制,所以建議少用DELETE方法。

HEAD獲取報文首部

HEADGET方法一樣,只是不返回報文主體部分,通常用于確認url的有效性及資源更新的日期時間等。

5.HTTPS的概念

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單來說就是是HTTP的安全版本,即在HTTP下加入SSL層,HTTPS的安全基石是SSL,因此加密的詳細內容就需要SSL

由于HTTP有以下幾個缺點:

傳輸的時候使用明文,這顯然會被不法者截取干一些見不得人的勾當。
沒有認證機制,這樣我們就可以偽造一些HTTP訪問,這顯然會造成一些困擾。比如Jmeter就是典型的例子,偽造一大堆的HTTP URL然后壓力測試,這也就是DOS攻擊的一種。
無法驗證報文的完整性,比如一個HTTP的報文已經被不法者截取并且篡改,而服務器端卻無法驗證。

HTTP與HTTPS的區別

正是由于以上這些缺點,HTTPS作出了以下一些改變:

  • HTTP 是明文傳輸,HTTPS 通過 SSL\TLS 進行了加密;
  • HTTP 的端口號是 80HTTPS443;
  • HTTPS 需要到 CA 申請證書,一般免費證書很少,需要交費;
  • HTTP 的連接很簡單,是無狀態的。而 HTTPS 協議則是由 SSL+HTTP; 協議構建的可進行加密傳輸、身份認證的網絡協議,比 HTTP 協議安全;

HTTPS的缺點:

通信的速度變慢,由于需要加密,一個握手就多了好幾個往返;
對用戶的機器負載的增加。

補充:HTTP協議與TCP協議

TCP協議對應于傳輸層,而HTTP協議對應于應用層,從本質上來說,二者沒有可比性。Http協議是建立在TCP協議基礎之上的,當瀏覽器需要從服務器獲取網頁數據的時候,會發出一次Http請求。Http會通過TCP建立起一個到服務器的連接通道,當本次請求需要的數據完畢后,Http會立即將TCP連接斷開,這個過程是很短的。所以Http連接是一種短連接,是一種無狀態的連接。所謂的無狀態,是指瀏覽器每次向服務器發起請求的時候,不是通過一個連接,而是每次都建立一個新的連接。如果是一個連接的話,服務器進程中就能保持住這個連接并且在內存中記住一些信息狀態。而每次請求結束后,連接就關閉,相關的內容就釋放了,所以記不住任何狀態,成為無狀態連接。

6.TCP與UDP的區別

  1. TCP面向連接(如撥打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接;
  2. TCP提供可靠的服務。即通過TCP連接傳送的數據,無差錯,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付;
  3. TCP面向字節流,實際上是把TCP數據看成一連串無結構的字節流;UDP是面向報文的,UDP沒有擁塞控制,因此網絡上出現擁塞不會使源主機的發送效率降低(對實時應用很有用,如IP電話,實時視頻會議等);
  4. 每一條TCP連接只能是點到點;UDP支持一對一,一對多,多對一,多對多的交互通信;
  5. TCP的首部開銷20字節;UDP的首部開銷小,只有個字節;
  6. TCP的邏輯通信信道是全雙工的可靠信道;UDP則是不可靠信道;

7.流媒體協議:

RTP、RTCP、RTSP、MMS、HLS、HTTP progressive streaming
當前在internet上傳送音頻和視頻等信息主要有兩種方式:
下載,完整下載一個視頻,再去播放
流式傳輸,如優酷、愛奇藝等視頻網址

作用:RTP位于傳輸層(通常是UDP)之上,應用程序之下,實時語音、視頻數據經過模數轉換和壓縮編碼處理后,先送給RTP封裝成為RTP數據單元,RTP數據單元被封裝為UDP數據報,然后再向下遞交給IP封裝為IP數據包。這么說RTP是沒有保證傳輸成功的,要保證成功,就要用到RTCPRTCP消息含有已發送數據的丟包統計和網絡擁塞等信息,服務器可以利用這些信息動態的改變傳輸速率,甚至改變凈荷的類型。RTCP消息也被封裝為UDP數據報進行傳輸。

歡迎關注

部分參考:
https://juejin.im/post/5afad7f16fb9a07abf72ac30?utm_medium=fe&utm_source=weixinqun

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容

  • 1、TCP為什么需要3次握手,4次斷開? “三次握手”的目的是“為了防止已失效的連接請求報文段突然又傳送到了服務端...
    杰倫哎呦哎呦閱讀 3,510評論 0 6
  • 當 app 和服務器進行通信的時候,大多數情況下,都是采用 HTTP 協議。HTTP 最初是為 web 瀏覽器而定...
    Flysss1219閱讀 1,294評論 0 4
  • 個人認為,Goodboy1881先生的TCP /IP 協議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,084評論 0 8
  • 今晚接著寫這一篇,我想寫讀後感。 我寫了一點東西的,結果一下就沒了,這種感覺真不好,不過我剛剛也離題了。所以再來一...
    市海閱讀 123評論 0 1
  • 【每日清單】683/700次記錄,2018-9-25,晴 【三件事】 1. []第一要務:項目文檔2/7-70% ...
    伽藍214閱讀 129評論 0 0