跟大白一起學http

先解釋一下這個‘大白’吧,它是我對自己的稱謂,為什么這么說呢,就是小白以上,大神未滿,今天簡單學習了http協議,所以這篇文章是寫給初學者的,也歡迎各路大神多提意見哦。

本文將從以下幾個方面介紹:

1. http是什么
2. 為什么要有http
3. http的工作原理
4. http協議的特點
5. 主要概念

1. http是什么

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是因特網上應用最為廣泛的一種網絡傳輸協議,所有的WWW文件都必須遵守這個標準;

它是一種能夠獲取如HTML這樣網絡資源的協議。它是Web上數據交換的基礎,是一種client-server協議,也就是說請求通常是由像瀏覽器這樣的接受方發起的;

HTTP是基于TCP/IP通信協議來傳遞數據的(HTML 文件, 圖片文件, 查詢結等)

2. 為什么要有http

起初設計它的目的主要用于 Web 瀏覽器與 Web 服務器之間的通信,當然現在它還可以用做其它目的

3. http的工作原理

HTTP協議工作于客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求、服務器作出響應

這里提到了URL,那么先說說URL吧

1. URL是什么
2. URL的組成部分有哪些
3. URL如何使用
4. 輸入URL的請求過程

URL是什么

URL—Uniform Resource Location統一資源定位符,說白了就是我們常說的“網址”,它是用于完整地描述Internet上網頁和其他資源的地址的一種標識方法;

組成

URL由: Protocol(協議)+Host(主機)+Port(端口)+Query組成。

URL的使用

超文本傳輸協議(HTTP)的統一資源定位符將從因特網獲取信息的五個基本元素包括在一個簡單的地址中:
傳送協議。
1.服務器。(通常為域名,有時為IP地址)
2.端口號。(以數字方式表示,若為HTTP的默認值“:80”可省略)
3.路徑。(以“/”字符區別路徑中的每一個目錄名稱)
4.查詢。(GET模式的窗體參數,以“?”字符為起點,每個參數以“&”隔開,再以“=”分開參數名稱與數據,通常以UTF8的URL編碼,避開字符沖突的問題)

URL請求過程

當你訪問一個網站的時候,輸入網址按下回車的瞬間你知道發生了什么嗎?

1.當你在瀏覽器輸入URL http://www.website.com 的時候,瀏覽器發送一個Request去獲取 http://www. website.com的html. 服務器把Response發送回給瀏覽器;
2.瀏覽器分析Response中的 HTML,發現其中引用了很多其他文件,比如圖片,CSS文件,JS文件;
3.瀏覽器會自動再次發送Request去獲取圖片,CSS文件,或者JS文件;
4.當所有的文件都下載成功后, 網頁就被顯示出來了;

在說URL的時候我們通常會想到URI,關于這兩者的區別請參見我另一篇文章:http://www.lxweimin.com/p/ba15d066f777

4. http協議的特點

1. HTTP是無連接
無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間

2. HTTP是媒體獨立的
這意味著,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型

3. HTTP是無狀態的
什么是無狀態呢?

無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快

HTTP是無狀態的:

在同一個連接中,兩個成功執行的請求之間是沒有關系的。這就帶來了一個問題,用戶沒辦法在一個網站進行連續的交互;
比如在一個電商網站里,用戶把某個商品加入了購物車中,換了一個頁面后再次添加商品,兩次添加商品的請求沒有聯系,瀏覽器無法知道最終用戶都選擇了哪些商品。而用HTTP的頭部擴展,HTTP Cookies就可以解決這個問題。把Cookies添加到頭部中,創建一個會話來讓每次請求都能共享相同的上下文信息,相同的狀態。

5. 主要概念

一個完整的http請求及響應包括以下內容:

1. http消息結構
2. http請求方法
3. http響應頭信息
4. http狀態碼

下面將介紹這幾個方面的概念

http消息結構

HTTP是基于客戶端/服務端(C/S)的架構模型,通過一個可靠的鏈接來交換信息,是一個無狀態的請求/響應協議。

  • 客戶端請求消息
    客戶端發送一個HTTP請求到服務器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,下圖給出了請求報文的一般格式。
客戶端消息結構
  • 服務器響應消息
    HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
服務器響應消息

這里只做概念性的介紹,實例請見這里

http請求方法

在客戶機和服務器之間進行請求-響應時,兩種最常被用到的方法是:GET 和 POST。

  • GET - 從指定的資源請求數據。
  • POST - 向指定的資源提交要被處理的數據

請注意,查詢字符串(名稱/值對)是在 GET 請求的 URL 中發送的:

/test/demo_form.asp?name1=value1&name2=value2

查詢字符串(名稱/值對)是在 POST 請求的 HTTP 消息主體中發送的:

POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

其他 HTTP 請求方法
下面的表格列出了其他一些 HTTP 請求方法:

其他方法

GET和POST的比較

GET&POST

http響應頭信息

正如在前面討論的一樣,當一個 Web 服務器對瀏覽器響應一個 HTTP 請求時,響應通常包括一個狀態行、一些響應頭信息、一個空行和文檔,一個典型的響應如下所示:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

http響應頭可以包含很多類型,具體詳細設置請參見這里

http狀態碼

當我們訪問一個網址時,打開控制臺的network選項可以看到這樣的信息:

http請求

可以看到有一個Status Code為200,這個就是我們說的http狀態碼,每一個http請求都伴有一個http狀態碼,不論請求是否成功。

狀態碼的直不同代表的請求狀態也不同,常見的http code有:

200 - 請求成功
301 - 資源(網頁等)被永久轉移到其它URL
404 - 請求的資源(網頁等)不存在
500 - 內部服務器錯誤

HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,后兩個數字沒有分類的作用。HTTP狀態碼共分為5種類型:

http狀態碼分類

本文簡單介紹了http協議的基本知識,就當是拋磚引玉了,歡迎大家補充和提意見哈。

參考資料:
http://www.runoob.com/http/http-tutorial.html
http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
http://wiki.jikexueyuan.com/project/servlet/client-request.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,413評論 6 152
  • Http協議詳解 標簽(空格分隔): Linux 聲明:本片文章非原創,內容來源于博客園作者MIN飛翔的HTTP協...
    Sivin閱讀 5,251評論 3 82
  • http協議有http0.9,http1.0,http1.1和http2三個版本,但是現在瀏覽器使用的是htt...
    一現_閱讀 1,885評論 0 3
  • 文~范乘風 暗夜風初竟,孤云愁復傾。 扶床憂滿腹,依枕月盈城。 長思書中事,未諳兒女情。 遙知春漸去,何處惜落英。
    范乘風閱讀 286評論 0 5