跟大白一起學(xué)http

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

本文將從以下幾個(gè)方面介紹:

1. http是什么
2. 為什么要有http
3. http的工作原理
4. http協(xié)議的特點(diǎn)
5. 主要概念

1. http是什么

HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是因特網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)傳輸協(xié)議,所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn);

它是一種能夠獲取如HTML這樣網(wǎng)絡(luò)資源的協(xié)議。它是Web上數(shù)據(jù)交換的基礎(chǔ),是一種client-server協(xié)議,也就是說請(qǐng)求通常是由像瀏覽器這樣的接受方發(fā)起的;

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

2. 為什么要有http

起初設(shè)計(jì)它的目的主要用于 Web 瀏覽器與 Web 服務(wù)器之間的通信,當(dāng)然現(xiàn)在它還可以用做其它目的

3. http的工作原理

HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請(qǐng)求、服務(wù)器作出響應(yīng)

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

1. URL是什么
2. URL的組成部分有哪些
3. URL如何使用
4. 輸入U(xiǎn)RL的請(qǐng)求過程

URL是什么

URL—Uniform Resource Location統(tǒng)一資源定位符,說白了就是我們常說的“網(wǎng)址”,它是用于完整地描述Internet上網(wǎng)頁和其他資源的地址的一種標(biāo)識(shí)方法;

組成

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

URL的使用

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

URL請(qǐng)求過程

當(dāng)你訪問一個(gè)網(wǎng)站的時(shí)候,輸入網(wǎng)址按下回車的瞬間你知道發(fā)生了什么嗎?

1.當(dāng)你在瀏覽器輸入U(xiǎn)RL http://www.website.com 的時(shí)候,瀏覽器發(fā)送一個(gè)Request去獲取 http://www. website.com的html. 服務(wù)器把Response發(fā)送回給瀏覽器;
2.瀏覽器分析Response中的 HTML,發(fā)現(xiàn)其中引用了很多其他文件,比如圖片,CSS文件,JS文件;
3.瀏覽器會(huì)自動(dòng)再次發(fā)送Request去獲取圖片,CSS文件,或者JS文件;
4.當(dāng)所有的文件都下載成功后, 網(wǎng)頁就被顯示出來了;

在說URL的時(shí)候我們通常會(huì)想到URI,關(guān)于這兩者的區(qū)別請(qǐng)參見我另一篇文章:http://www.itdecent.cn/p/ba15d066f777

4. http協(xié)議的特點(diǎn)

1. HTTP是無連接
無連接的含義是限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶的請(qǐng)求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時(shí)間

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

3. HTTP是無狀態(tài)的
什么是無狀態(tài)呢?

無狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快

HTTP是無狀態(tài)的:

在同一個(gè)連接中,兩個(gè)成功執(zhí)行的請(qǐng)求之間是沒有關(guān)系的。這就帶來了一個(gè)問題,用戶沒辦法在一個(gè)網(wǎng)站進(jìn)行連續(xù)的交互;
比如在一個(gè)電商網(wǎng)站里,用戶把某個(gè)商品加入了購(gòu)物車中,換了一個(gè)頁面后再次添加商品,兩次添加商品的請(qǐng)求沒有聯(lián)系,瀏覽器無法知道最終用戶都選擇了哪些商品。而用HTTP的頭部擴(kuò)展,HTTP Cookies就可以解決這個(gè)問題。把Cookies添加到頭部中,創(chuàng)建一個(gè)會(huì)話來讓每次請(qǐng)求都能共享相同的上下文信息,相同的狀態(tài)。

5. 主要概念

一個(gè)完整的http請(qǐng)求及響應(yīng)包括以下內(nèi)容:

1. http消息結(jié)構(gòu)
2. http請(qǐng)求方法
3. http響應(yīng)頭信息
4. http狀態(tài)碼

下面將介紹這幾個(gè)方面的概念

http消息結(jié)構(gòu)

HTTP是基于客戶端/服務(wù)端(C/S)的架構(gòu)模型,通過一個(gè)可靠的鏈接來交換信息,是一個(gè)無狀態(tài)的請(qǐng)求/響應(yīng)協(xié)議。

  • 客戶端請(qǐng)求消息
    客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器的請(qǐng)求消息包括以下格式:請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)四個(gè)部分組成,下圖給出了請(qǐng)求報(bào)文的一般格式。
客戶端消息結(jié)構(gòu)
  • 服務(wù)器響應(yīng)消息
    HTTP響應(yīng)也由四個(gè)部分組成,分別是:狀態(tài)行、消息報(bào)頭、空行和響應(yīng)正文。
服務(wù)器響應(yīng)消息

這里只做概念性的介紹,實(shí)例請(qǐng)見這里

http請(qǐng)求方法

在客戶機(jī)和服務(wù)器之間進(jìn)行請(qǐng)求-響應(yīng)時(shí),兩種最常被用到的方法是:GET 和 POST。

  • GET - 從指定的資源請(qǐng)求數(shù)據(jù)。
  • POST - 向指定的資源提交要被處理的數(shù)據(jù)

請(qǐng)注意,查詢字符串(名稱/值對(duì))是在 GET 請(qǐng)求的 URL 中發(fā)送的:

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

查詢字符串(名稱/值對(duì))是在 POST 請(qǐng)求的 HTTP 消息主體中發(fā)送的:

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

其他 HTTP 請(qǐng)求方法
下面的表格列出了其他一些 HTTP 請(qǐng)求方法:

其他方法

GET和POST的比較

GET&POST

http響應(yīng)頭信息

正如在前面討論的一樣,當(dāng)一個(gè) Web 服務(wù)器對(duì)瀏覽器響應(yīng)一個(gè) HTTP 請(qǐng)求時(shí),響應(yīng)通常包括一個(gè)狀態(tài)行、一些響應(yīng)頭信息、一個(gè)空行和文檔,一個(gè)典型的響應(yīng)如下所示:

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

http響應(yīng)頭可以包含很多類型,具體詳細(xì)設(shè)置請(qǐng)參見這里

http狀態(tài)碼

當(dāng)我們?cè)L問一個(gè)網(wǎng)址時(shí),打開控制臺(tái)的network選項(xiàng)可以看到這樣的信息:

http請(qǐng)求

可以看到有一個(gè)Status Code為200,這個(gè)就是我們說的http狀態(tài)碼,每一個(gè)http請(qǐng)求都伴有一個(gè)http狀態(tài)碼,不論請(qǐng)求是否成功。

狀態(tài)碼的直不同代表的請(qǐng)求狀態(tài)也不同,常見的http code有:

200 - 請(qǐng)求成功
301 - 資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL
404 - 請(qǐng)求的資源(網(wǎng)頁等)不存在
500 - 內(nèi)部服務(wù)器錯(cuò)誤

HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型,后兩個(gè)數(shù)字沒有分類的作用。HTTP狀態(tài)碼共分為5種類型:

http狀態(tài)碼分類

本文簡(jiǎn)單介紹了http協(xié)議的基本知識(shí),就當(dāng)是拋磚引玉了,歡迎大家補(bǔ)充和提意見哈。

參考資料:
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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容