Http協(xié)議的詳細總結

HTTP協(xié)議

超文本傳輸協(xié)議HyperText Transfer Protocol)袖牙,縮寫HTTP雳攘。通過HTTP或者HTTPS協(xié)議請求的資源由統(tǒng)一資源標識符(Uniform Resource Identifiers赏胚,URI)來標識谜洽。由HTTP客戶端發(fā)起一個請求宵睦,創(chuàng)建一個到服務器指定端口(默認是80端口)的TCP連接交惯。HTTP服務器則在那個端口監(jiān)聽客戶端的請求肯适。一旦收到請求变秦,服務器會向客戶端返回一個狀態(tài),比如"HTTP/1.1 200 OK"框舔,以及返回的內(nèi)容蹦玫,如請求的文件、錯誤消息刘绣、或者其它信息樱溉。

URI和URL

  • URI:Uniform Resource Identifier,統(tǒng)一資源標識符
    Web上可用的每種資源如HTML文檔纬凤、圖像福贞、視頻片段、程序等都是用URI來定位的停士;
    URI一般由三部分組成:
  1. 訪問資源的命名機制
  2. 存放資源的主機名
  3. 資源自身的名稱挖帘,由路徑表示完丽,著重強調(diào)于資源
  • URL:Uniform Resource Location,統(tǒng)一資源定位符
    URL是Internet上用來描述信息資源的字符串拇舀,主要用在各種WWW客戶程序和服務器程序上逻族。URL是URI的一種。
    采用URL可以用一種統(tǒng)一的格式來描述各種信息資源你稚,包括文件瓷耙、服務器的地址和目錄等。
    URL一般由三部組成
  1. 協(xié)議
  2. 可訪問該資源的主機IP地址(或帶有端口號)
  3. 主機資源的具體地址(目錄加文件名)

URL的構成:

  1. 協(xié)議部分:協(xié)議部分為http:
  2. 域名部分:域名部分例如"www.reibang.com"刁赖,當然域名也可以用IP地址搁痛,IP少一步用DNS服務器解析
  3. 端口部分:域名和端口之間使用":"分隔。端口不是URL必須的部分宇弛,如果端口省略鸡典,將采用默認端口號80,所以實際請求地址是http://www.reibang.com:80
    4.虛擬目錄部分:從域名后的第一個“/”開始到最后一個“/”為止枪芒,是虛擬目錄部分彻况。虛擬目錄也不是一個URL必須的部分。
  4. 文件名部分:指在服務器中訪問的資源文件的路徑舅踪。
  5. 錨部分:從“#”開始到最后纽甘,都是錨部分,也不是必須的部分抽碌。做過html的都知道悍赢,用于定位到頁面的滑動位置。
  6. 參數(shù)部分:從“货徙?”開始到“#”為止之間的部分為參數(shù)部分左权,又稱搜索部分、查詢部分痴颊。例如?page=1赏迟。

請求的種類:

HTTP協(xié)議中共定義了八種方法或者叫“動作”來表明對Request-URI指定的資源的不同操作方式。就類似操作數(shù)據(jù)庫和文件系統(tǒng)一樣蠢棱,設計網(wǎng)絡的請求也是一樣锌杀。URL用于定位了網(wǎng)絡資源,創(chuàng)造PUT,DELETE,POST,GET來對應增泻仙,刪抛丽,改,查操作饰豺。但是我們在實際應用中常用的也就是get和post,其他請求方式也都可以通過這兩種方式間接的來實現(xiàn)允蜈。

  • GET
    向指定資源發(fā)出“顯示“信息冤吨。使用GET方法只用于獲取數(shù)據(jù)蒿柳,而不應該改變數(shù)據(jù)本身袁波,即不對數(shù)據(jù)進行操作和提交信息昨寞。

  • POST
    向指定資源提交數(shù)據(jù)敷待,請求服務器進行處理(例如提交參數(shù)/表單氧卧,或者上傳文件)味悄≌胱耍可能會對數(shù)據(jù)進行操作和提交信心纽疟,創(chuàng)建資源盛泡。

  • PUT
    向指定資源位置上傳其最新內(nèi)容捺癞。

  • DELETE
    顧名思義夷蚊,請求服務器刪除URI所對應的資源。

  • HEAD
    與GET方法一樣髓介,都是向服務器發(fā)出指定資源的請求惕鼓。只不過服務器將不傳回資源的本文部分。它的好處在于唐础,使用這個方法可以在不必傳輸全部內(nèi)容的情況下箱歧,就可以獲取其中“關于該資源的信息”(元信息或稱元數(shù)據(jù))。

  • TRACE
    回顯服務器收到的請求一膨,主要用于測試或診斷呀邢。

  • OPTIONS
    這個方法可使服務器傳回該資源所支持的所有HTTP請求方法。用'*'來代替資源名稱豹绪,向Web服務器發(fā)送OPTIONS請求价淌,可以測試服務器功能是否正常運作。

  • CONNECT
    HTTP/1.1協(xié)議中預留給能夠?qū)⑦B接改為管道方式的代理服務器森篷。通常用于SSL加密服務器的鏈接(經(jīng)由非加密的HTTP代理服務器)输钩。

GET和POST的區(qū)別:

  1. 參數(shù)攜帶位置不同。
    GET提交的數(shù)據(jù)會附加家URL之后(即把數(shù)據(jù)放在請求行中)仲智,會在地址欄中顯示买乃,接?=傳值钓辆,多個參數(shù)用&連接剪验。POST提交的數(shù)據(jù)放在HTTP包體中,地址欄不顯示前联。

  2. 傳輸數(shù)據(jù)大小限制不同功戚。
    不同瀏覽器對URL的長度有限制,因此對于GET提交時似嗤,傳輸數(shù)據(jù)就會受到URL長度的限制啸臀。POST由于不是通過URL傳值,理論上數(shù)據(jù)不受限。

  3. POST的安全性要比GET的安全性高乘粒。因為瀏覽器可能對請求地址做歷史記錄的存儲豌注,對于GET請求的登錄,那其他人就可以直接在URL上拿到你的賬號和密碼了灯萍,而POST拿不到參數(shù)轧铁。

HTTP請求信息:

客戶端發(fā)送一個HTTP請求到服務的請求信息包括以下格式:
請求行(request line)、請求頭(header旦棉,常用于存放token)齿风、空行和請求數(shù)據(jù)四個部分。

image.png

例如:

GET /8669504-c2641e8e6eed5904.png HTTP/1.1
Host www.reibang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/,/*;q=0.8
Referer www.reibang.com
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
name=Professional%20Ajax&publisher=lili

  1. 第一行請求行绑洛,用來說明請求類型救斑,要訪問的資源以及所使用的HTTP版本。
  2. 第二部分诊笤,大括號之間的請求頭部系谐,用于提交服務器的附加信息。
  3. 第三部分讨跟,空行纪他,請求頭部后面的空行是必須的。
  4. 第四部分晾匠,請求數(shù)據(jù)也叫主體茶袒,可以添加任意的其他數(shù)據(jù)。

HTTP響應信息:

服務器接受請求回傳響應信息也由四分部組成:
狀態(tài)行凉馆,消息報頭薪寓,空行和響應正文。
例如:

HTTP/1.1 200 OK
Date: Fri, 22 May 2017 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
</body>
</html>

  1. 第一行包括協(xié)議版本號澜共,返回狀態(tài)碼
  2. 第二行為響應日期時間
  3. 第三行為響應消息報頭向叉,Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8
  4. 響應正文,服務器返回給客戶端的文本信息嗦董。

HTTP狀態(tài)碼:

狀態(tài)碼有三位數(shù)字母谎,第一數(shù)字表示當前相應的類型,各個類型有:

  • 1xx消息——請求已被服務器接受京革,繼續(xù)處理
  • 2xx成功——請求已成功被服務器接收(如見到就像親人的200奇唤,201)
  • 3xx重定向——需要后續(xù)操作才能完成這一請求
  • 4xx請求錯誤——客戶端錯誤:請求含有詞法錯誤或無法被執(zhí)行(如見到就想暴走的404 Not Found)
  • 5xx服務器錯誤——服務端錯誤:服務器在處理某個正確請求時發(fā)生錯誤(如一見到就想找后臺的500)

常見的狀態(tài)碼如下:
200 OK:客戶端請求成功
400 Bad Request:客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized:請求未經(jīng)授權匹摇,這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden:服務器收到請求咬扇,但是拒絕提供服務
500 Internal Server Error:服務器發(fā)生不可預期的錯誤
503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間后可能恢復正常

總結HTTP一次請求的完整過程:

image.png
  1. 客戶端與服務端建立TCP連接
  2. 通過TCP套接字連接廊勃,發(fā)送HTTP請求
  3. 服務器解析請求懈贺,定位請求資源,將查詢資源然后返回HTML文本數(shù)據(jù),由客戶端讀取隅居。
  4. 釋放TCP連接
    5.客戶端瀏覽器解析HTML內(nèi)容
瀏覽器輸入網(wǎng)站發(fā)生的事件:

1钠至、瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;
2、解析出 IP 地址后胎源,根據(jù)該 IP 地址和默認端口 80,和服務器建立TCP連接;
3屿脐、瀏覽器發(fā)出讀取文件(URL 中域名后面部分對應的文件)的HTTP 請求涕蚤,該請求報文作為 TCP 三次握手的第三個報文的數(shù)據(jù)發(fā)送給服務器;
4、服務器對瀏覽器請求作出響應的诵,并把對應的 html 文本發(fā)送給瀏覽器;
5万栅、釋放 TCP連接;
6、瀏覽器將該 html 文本并顯示內(nèi)容;

Http各版本特性有哪些:

HTTP 1.0

特點:
1.引入請求頭和響應頭(數(shù)據(jù)類型西疤、語言版本烦粒、編碼類型、用戶代理)代赁;
2.數(shù)據(jù)壓縮扰她;
3.引入狀態(tài)碼;
4.提供了Cache緩存機制(head里的緩存頭:If-Modified-Since芭碍、Expires)徒役。

瓶頸:
僅支持短連接,對于包含多個請求的文件窖壕,會大大增加開銷忧勿;
串行文件傳輸,一個請求沒有及時返回瞻讽,會引起隊頭阻塞鸳吸;
一個服務器僅支持一個域名;
因為在響應頭中需要指定數(shù)據(jù)大小速勇,因此無法接收動態(tài)生成的數(shù)據(jù)晌砾;
服務器只能傳遞完整的數(shù)據(jù),而不能滿足“只想要數(shù)據(jù)的一部分”這樣的需求快集,會導致帶寬浪費贡羔;
不支持斷點續(xù)傳。
每次數(shù)據(jù)傳輸个初,在TCP建立連接時乖寒,三次握手都會有1.5個RTT(round-trip time)的延遲。

HTTP 1.1

特點:
1.支持持久連接院溺,一次連接可以發(fā)送多個請求和響應(最多6個)
2.引入虛擬主機技術楣嘁,讓一個服務器可以支持多個域名;
3.引入Cookie與安全機制;
4.引入range頭域逐虚,可以只請求資源的一部分(狀態(tài)碼206)聋溜;
5.優(yōu)化緩存策略(在head中,增加Etag叭爱、If-Unmodified-Since撮躁、If-Match、If-None-Match等緩存頭)买雾;
6.增加錯誤狀態(tài)碼把曼。

HTTP 2.0

1.使用多路復用技術,一個連接可以發(fā)送多個請求漓穿;
2.可以設置請求優(yōu)先級嗤军;
3.借助專門為首部壓縮設計的HPACK 算法進行首部壓縮。

HTTP2.0多路復用有多好晃危?
HTTP 性能優(yōu)化的關鍵并不在于高帶寬叙赚,而是低延遲。TCP 連接會隨著時間進行自我「調(diào)諧」僚饭,起初會限制連接的最大速度震叮,如果數(shù)據(jù)成功傳輸,會隨著時間的推移提高傳輸?shù)乃俣壤嘶拧_@種調(diào)諧則被稱為 TCP 慢啟動冤荆。由于這種原因,讓原本就具有突發(fā)性和短時性的 HTTP 連接變的十分低效权纤。
HTTP/2 通過讓所有數(shù)據(jù)流共用同一個連接钓简,可以更有效地使用 TCP 連接,讓高帶寬也能真正的服務于 HTTP 的性能提升汹想。

HTTP 3.0

特點:
1.基于UDP
2.實現(xiàn)了多路復用外邓;
3.實現(xiàn)了流量控制、可靠傳輸古掏;
4.實現(xiàn)了快速握手损话。

瓶頸:
兼容性尚不完整;
優(yōu)化程度不高槽唾。

參考:
https://blog.csdn.net/qq_44647809/article/details/120570572
https://zhuanlan.zhihu.com/p/342311013

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丧枪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子庞萍,更是在濱河造成了極大的恐慌拧烦,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钝计,死亡現(xiàn)場離奇詭異恋博,居然都是意外死亡齐佳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門债沮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炼吴,“玉大人,你說我怎么就攤上這事疫衩」璞模” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵隧土,是天一觀的道長提针。 經(jīng)常有香客問我,道長曹傀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任饲宛,我火速辦了婚禮皆愉,結果婚禮上,老公的妹妹穿的比我還像新娘艇抠。我一直安慰自己幕庐,他們只是感情好,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布家淤。 她就那樣靜靜地躺著异剥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪絮重。 梳的紋絲不亂的頭發(fā)上冤寿,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機與錄音青伤,去河邊找鬼督怜。 笑死,一個胖子當著我的面吹牛狠角,可吹牛的內(nèi)容都是我干的号杠。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼丰歌,長吁一口氣:“原來是場噩夢啊……” “哼姨蟋!你這毒婦竟也來了?” 一聲冷哼從身側響起立帖,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤眼溶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厘惦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偷仿,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡哩簿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了酝静。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片节榜。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖别智,靈堂內(nèi)的尸體忽然破棺而出宗苍,到底是詐尸還是另有隱情,我是刑警寧澤薄榛,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布讳窟,位于F島的核電站,受9級特大地震影響敞恋,放射性物質(zhì)發(fā)生泄漏丽啡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一硬猫、第九天 我趴在偏房一處隱蔽的房頂上張望补箍。 院中可真熱鬧,春花似錦啸蜜、人聲如沸坑雅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裹粤。三九已至,卻和暖如春蜂林,著一層夾襖步出監(jiān)牢的瞬間遥诉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工悉尾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留突那,地道東北人。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓构眯,卻偏偏與公主長得像愕难,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惫霸,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理猫缭,服務發(fā)現(xiàn),斷路器壹店,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • (原話)談談對HTTP協(xié)議的理解:超文本傳輸協(xié)議硅卢,應用于OSI網(wǎng)絡模型中的應用層射窒,是用于服務器傳輸超文本到本地瀏覽...
    24_yu閱讀 878評論 0 1
  • 一藏杖、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,337評論 6 152
  • HTTP概述 超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol) 是互聯(lián)網(wǎng)上應用最...
    曹淵說創(chuàng)業(yè)閱讀 3,843評論 2 61
  • Http協(xié)議詳解 標簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)脉顿,內(nèi)容來源于博客園作者MIN飛翔的HTTP協(xié)...
    Sivin閱讀 5,211評論 3 82