打開百度,度娘告訴我javascript
http是一個簡單的請求-響應協議,它一般運行在TCP之上。它指定了客戶端可能發送給服務器什麼樣的消息以及獲得什麼樣的響應。請求和響應消息的頭以ASCII碼形式給出;而消息內容則具備一個相似MIME的格式。這個簡單模型是早期Web成功的有功之臣,由於它使得開發和部署是那麼的直截了當
上面的描述可能過於專業術語了,簡單的說,HTTP是一個約定協議規範,規範約定,客戶端(Firefox、IE、 chrome)經過發起一個請求到服務端,服務端根據客戶端的請求
返回對應的響應結果
。css
打個比方,咱們去零售店買東西,1塊能夠買棒棒糖,2塊能夠買果凍,五塊能夠買冰淇淋,我至關於客戶端,售賣員至關於服務端,我對售賣員說(發起一個請求),給我來一個棒棒糖,順帶遞給了他一塊錢,售賣員根據個人描述和金錢,遞給了我一個棒棒糖(響應),整個過程就是一個請求
-相應
的過程。html
上面的過程映射到咱們平常用瀏覽器(Chrome)打開一個百度頁面搜索http
這個關鍵字,當咱們敲下回車鍵的同時java
chrome會向百度的服務器發起了一個請求,請求的資源路徑爲https://www.baidu.com/s?wd=ht... ,百度服務器根據咱們請求的關鍵字http
返回給咱們對應的搜索結果。web
說到HTTP就不得不說HTTP的產物URL,URL(Uniform Resource Locator,統一資源定位符) 其實就是咱們經常說的網址,好比www.baidu.com/s/a/v/s
,對於URL的格式,HTTP協議有相對應的規範設計chrome
協議 主機 端口 路徑
上面簡單的介紹了HTTP協議是什麼,那麼HTTP協議是如何工做的呢。首先你們須要知道的是,每個網址好比www.baidu.com
都是對外提供了一個端口來進行響應HTTP請求的,若是在請求的時候不聲明端口,默認就是80端口,也就是說咱們常常請求的www.baidu.com
其實默認請求的是百度服務器的80端口,你也能夠這樣訪問www.baidu.com:80
效果都是同樣的。下面是具體的請求和響應的步驟json
咱們在客戶端(瀏覽器)輸入域名URL,回車請求數組
請求報文
響應報文
報文格式涉及到了兩方面,請求報文格式和響應報文格式瀏覽器
請求報文也就是發起請求時的數據格式,當咱們用瀏覽器請求頁面時,這個請求報文是由客戶端幫咱們默認實現的tomcat
總體請求報文格式分爲三大塊,請求行,請求頭部,請求數據
請求行
GET
HEAD
POST
PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH
請求頭部,頭部字段名:值 ,請求攜帶的頭部信息,能夠自定義,通常的頭部信息包括,Host,User-Agent,Cookie,Accept等等
Accept,客戶端可識別的類型,識別到對應的格式後,瀏覽器會對返回的數據作對應的處理,好比html就對數據作渲染,javascript就看成腳本語言來識別
GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 Host: www.example.com Accept-Language: en, mi
響應報文格式就是服務端響應時的數據格式,當咱們在請求咱們的Servlet時,響應報文是由tomcat幫咱們默認實現的
與請求報文相似,響應報文主要包含,狀態行,響應頭部,響應主體內容
狀態行
響應頭部,響應頭部主要是響應請求的描述信息,好比content_length表示響應內容的長度,content_type響應數據的格式,date響應時間等等
Content-Type,contentType是響應頭部很重要的信息,瀏覽器經過contentType來識別當前服務端返滬ide響應內容的格式,
Set-Cookie,服務端在響應頭部寫入Set-Cookie,表示須要將當前Set-Cookie的值寫入cookie,而且在下次請求的時候放入到請求頭部帶回服務端
Set-Cookie: userName=zhangsan; expires=Thu, 01-Jan-2020 00:00:01 GMT; path=/my 上面的頭信息表示,將userName=zhangsan寫入cookie, cookie的到期時間爲2020年一月一日 path=/my,表示只有在請求/my,及/my的子目錄的時帶上這個cookie
HTTP/1.1 200 OK Date: Sat, 31 Dec 2005 23:59:59 GMT Content-Type: text/html;charset=ISO-8859-1 Content-Length: 122 <html> <head> <title>Wrox Homepage</title> </head> <body> <!-- body goes here --> </body> </html>
在返回頭的狀態行的狀態碼錶示當前請求結果的大體狀態結果,狀態碼由三位數組成,常見的狀態碼有200,404,500,302等等,那麼爲何須要這麼多狀態碼呢,主要是爲了區分各類各樣的狀況,HTTP狀態碼的前第一位數表示表明了響應的五種狀態之一
更多狀態碼的詳細含義,https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660
知乎上有一個回答很形象,https://www.zhihu.com/questio...
HTTP是要基於TCP鏈接基礎上的,簡單的說,TCP就是單純創建鏈接,不涉及任何咱們須要請求的實際數據,簡單的傳輸。HTTP是用來收發數據,即實際應用上來的。
TCP是公路,HTTP是公路上跑的車。
因此,若是要把貨物從a點運到b點,首先要在ab之間修路,這個工做由ip和tcp這倆夥伴完成(其實還有其它夥伴,但這倆出力最大,就由這倆代言了)。
路修好了之後,就能夠「應用」了,公路應用於什麼?固然是應用於車來車往了。跑啥車都行,好比跑http牌子的車,也能夠跑mail牌的車
https://www.runoob.com/http/h...
https://baike.baidu.com/item/...
我曾在銀色平原漫步也曾在青草之河垂釣
我便是平靜的海面
又是洶涌的風暴
這片土地認識我