HTTP的一些相關簡介

之前在回憶面試題的時候,面試官曾經問過我關於網絡協議的一些東西,回答的當時感覺自己很垃圾,然後面試結束之後,自行百度,翻閱書籍,然後做了細緻的整理,現在我就來分享給大家。

HTTP你到底是個什麼鬼

HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網服務器傳輸超文本到本地瀏覽器的傳送協議。HTTP 是基於 TCP/IP 協議通信協議來傳遞數據(HTML 文件、圖片文件、查詢結果等)。它不涉及數據包(packet)傳輸,主要規定了客戶端和服務器之間的通信格式,默認使用80端口。

這其實就是百度百科裏面的精簡化的內容,雖然說不上太細緻,但是已經算是對HTTP做了一個大概的描述,我們接下來就從以下的幾個方面來看一下這個HTTP吧。

HTTP報文

一般的,用於HTTP協議交互的信息被稱爲HTTP報文,那麼說到HTTP報文,我們做開發的,很多時候都理解成報文是由一行一行的簡單字符串,確實也是,因爲HTTP報文都是純文本,所以,你就可以非常方便的進行讀寫。我們來看下圖:

在這裏插入圖片描述

上圖顯示的就是一個簡單的HTTP事務的報文,圖中分爲了2部分,請求報文和響應報文。

請求報文、響應報文

從客戶端發往服務器的報文叫請求報文,也叫做request message ,服務器在接收到請求報文之後,不得象徵性的給人家返回點東西?禮尚往來嘛,這時候,服務器端相應一下,發給客戶端一點東西,這就稱之爲相應報文。

報文分爲了三個層級,也算是三個東西,起始行,首部,主體,這三個東西我們必須得知道他們到底是幹啥的,這樣被面試官問到之後,至少能說點東西出來。

起始行

圖片中的起始行種,請求報文和響應報文的起始行是不一樣的,【GET /test/hi-there.txt HTTP/1.0】,

  • GET 服務器通過GET方法獲取資源
  • /test/hi-there.txt 這是資源get請求就是獲取這個資源
  • HTTP1.0 就是指定的是HTTP協議版本爲1.0

響應報文的起始行主要是說明服務器的響應情況 【HTTP/1.0 200 OK】

同樣的 HTTP1.0還是版本,而這個200表示的是狀態碼,OK相應狀態沒問題。

以上的就是起始行的所有內容介紹了,是不是很清晰很透徹了?那我們來看這個首部。

首部

大家有沒有注意到首部都是鍵值對的形式存在的,就是都是key:value這種形式的,如下,

請求報文首部:

Accept:text/*
Accept-Language:en,fr

響應報文首部:

Content-Type:text/plain
Content-length:19

光這麼看其實很沒意思是吧,看了半天還得靠自己的英文才知道是啥意思,我給大家找來個關於各種首部字段的說明。

通用首部字段HTTP1.1

請求首部字段:

響應首部字段:

實體首部字段:

在這裏插入圖片描述

其實這麼多首部字段,說白了就是一句話 使用首部字段是爲了給瀏覽器和服務器提供報文主體大小、所使用的語言、認證信息等內容。

看就是這麼簡單,方便,關於怎麼去使用,本文先不做講解,不然這首部字段說起來,那就沒盡頭了,有興趣的小夥伴不妨可以手動去搜索一下把!

主體

大家可以回去看一下圖一,圖一中響應報文的主體,hi,I am message,實體的主體和報文的主體是一個可選的數據塊。與起始行和首部不同的是,主體中可包含文本或二進制數據,也可以爲空如圖1中的請求報文主體,Content-type行說明了主體是一個純文本文檔,Content-length說明了主體有19字節

其實有些人也會這麼理解,Http報文包括請求報文和響應報文兩大部分,其中請求報文由請求行(request line)、請求頭(header)、空行和請求體四個部分組成。而響應報文由狀態行、響應頭部、空行和響應體四個部分組成。

給大家一幅圖,這個是我之前從別的地方看來的,感覺和這句話很搭配。

關於HTTP報文我們先告一段落,我們繼續往下看!

HTTP請求方式

開發人員都知道,請求方式最常用的就是GET和POST,但是實際上不止這兩種,我之前竟然一點不知道,內心表示HTTP你還是我認識的HTTP麼?

  • GET:請求指定的頁面信息,並返回實體主體。

  • HEAD:類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭。

  • POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。

  • PUT:從客戶端向服務器傳送的數據取代指定的文檔的內容。

  • DELETE:請求服務器刪除指定的頁面。

後來當我看到之後,內心接受了,原來是這麼回事,HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

在這裏插入圖片描述

關於HTTP請求就說這麼多了,接下來就是HTTP狀態碼了,這三位數字描述了請求過程中所發生的情況。每個狀態碼的第一位數字用於描述狀態的一般類型(“成功”、“出錯”等)。

HTTP狀態碼

給大家送上兩個圖,之前在刷面試的時候無意間看到的圖,感覺特別的形象,幫助大家理解狀態碼有神奇的功效。

在這裏插入圖片描述

  • 301—永久移動。被請求的資源已被永久移動位置;
  • 302—請求的資源現在臨時從不同的 URI 響應請求;
  • 305—使用代理。被請求的資源必須通過指定的代理才能被訪問;
  • 307—臨時跳轉。被請求的資源在臨時從不同的URL響應請求;
  • 400—錯誤請求;
  • 402—需要付款。該狀態碼是爲了將來可能的需求而預留的,用於一些數字貨幣或者是微支付;
  • 403—禁止訪問。服務器已經理解請求,但是拒絕執行它;
  • 404—找不到對象。請求失敗,資源不存在;
  • 406—不可接受的。請求的資源的內容特性無法滿足請求頭中的條件,因而無法生成響應實體;

在這裏插入圖片描述

  • 408—請求超時;
  • 409—衝突。由於和被請求的資源的當前狀態之間存在衝突,請求無法完成;
  • 410—遺失的。被請求的資源在服務器上已經不再可用,而且沒有任何已知的轉發地址;
  • 413—響應實體太大。服務器拒絕處理當前請求,請求超過服務器所能處理和允許的最大值。
  • 417—期望失敗。在請求頭 Expect 中指定的預期內容無法被服務器滿足;
  • 418—我是一個茶壺。超文本咖啡罐控制協議,但是並沒有被實際的HTTP服務器實現;
  • 420—方法失效。
  • 422—不可處理的實體。請求格式正確,但是由於含有語義錯誤,無法響應;
  • 500—服務器內部錯誤。服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理;

這個狀態碼的圖是在網上找的,鏈接送上【http://www.sohu.com/a/278045231_120014184】

以上就是我想給大家介紹的HTTP,你到底是什麼鬼,下一篇文章我將會給大家講述HTTP1.0和HTTP1.1的那些事!敬請期待呦!

我是懿,一個正在被打擊卻努力前進的碼農。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章