日常開發(fā)過程中豺鼻,經(jīng)常會(huì)使用到http報(bào)文傳遞综液,今天就來說一說http的一些基礎(chǔ)知識(shí)。
首先來看下wiki百科的定義
超文本傳輸協(xié)定(英文:HyperText Transfer Protocol儒飒,縮寫:HTTP)是一種用於分佈式谬莹、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議。 HTTP是全球資訊網(wǎng)的數(shù)據(jù)通信的基礎(chǔ)。
HTTP思維導(dǎo)圖
這里提供一張HTTP報(bào)文組成的思維導(dǎo)圖附帽,下面會(huì)圍繞這張圖來展開講解內(nèi)容埠戳。
HTTP版本
超文本傳輸協(xié)議已經(jīng)演化出了很多版本,它們中的大部分都是向下兼容的士葫。在 RFC 2145 中描述了HTTP版本號(hào)的用法乞而。客戶端在請(qǐng)求的開始告訴服務(wù)器它采用的協(xié)議版本號(hào)慢显,而后者則在響應(yīng)中采用相同或者更早的協(xié)議版本∽δ#現(xiàn)行常用版本是在1999年提出的1.1版本,以下所說的內(nèi)容都是基于1.1版本來展開的荚藻。
HTTP報(bào)文組成 —— 行(Line)
請(qǐng)求行
請(qǐng)求行包含HTTP版本屋灌、協(xié)議、請(qǐng)求路徑应狱、請(qǐng)求方法幾部分信息共郭。
-
首先來說下請(qǐng)求路徑:
請(qǐng)求路徑- 協(xié)議(Protocol):常用協(xié)議一般有http和https兩種;
- 主機(jī)(Host):主機(jī)域名疾呻;
- 路徑(Path):域名子路徑
- 參數(shù)(Query String):請(qǐng)求參數(shù)
請(qǐng)求路徑由以上幾個(gè)部分組成除嘹,其中協(xié)議和主機(jī)是必須項(xiàng),用來區(qū)分不同地址岸蜗,路徑和參數(shù)可以根據(jù)需要或有或無尉咕。譬如“http://www.baidu.com” 是沒有路徑和參數(shù)的,直接指向百度的搜索主頁璃岳,然而在搜索結(jié)果頁年缎,就會(huì)有路徑和參數(shù)。
請(qǐng)求方法
在http1.1版本中铃慷,收錄了八種請(qǐng)求方法单芜,在開發(fā)中常用的有四種。
PUT:增
DELETE:刪
POST:改
GET:查
tips:在這里需要引入一個(gè)概念犁柜,冪等洲鸠。**
一個(gè)方法重復(fù)執(zhí)行多次,產(chǎn)生的效果是一樣的馋缅,那就是冪等(idempotent)的坛怪。反之,非冪等股囊。
在上面四種請(qǐng)求方法中,PUT是冪等的更啄,POST是非冪等的稚疹。
在這里再引入一個(gè)思考,你們公司的接口,更新數(shù)據(jù)是用PUT還是POST來做的内狗?
狀態(tài)行
狀態(tài)行是用來表示請(qǐng)求響應(yīng)的返回狀態(tài)
1xx:指示信息——表示請(qǐng)求已經(jīng)接受怪嫌,繼續(xù)處理中
2xx:成功——表示請(qǐng)求已經(jīng)被成功接收、理解柳沙、接受
3xx:重定向——要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作
4xx/客戶端錯(cuò)誤——請(qǐng)求有語法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn)
5xx/服務(wù)器端錯(cuò)誤——服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求
知道了這些狀態(tài)碼分類岩灭,就可以根據(jù)不同的狀態(tài)碼,分析請(qǐng)求失敗的大致原因出在哪一方赂鲤,可以更快的定位問題噪径。
HTTP報(bào)文組成 —— 頭(Head)
HTTP的請(qǐng)求和相應(yīng)都會(huì)包含首部,首部中會(huì)包含一些請(qǐng)求或響應(yīng)的額外重要信息数初,例如對(duì)象類型(content-type)找爱,保持連接(keep-Alive)等。
cookie
因?yàn)閔ttp是無狀態(tài)協(xié)議泡孩,它不對(duì)之前發(fā)生過的請(qǐng)求和響應(yīng)的狀態(tài)進(jìn)行管理车摄。也就是說無法根據(jù)之前的狀態(tài)進(jìn)行本次的請(qǐng)求處理。
在請(qǐng)求和響應(yīng)中寫入cookie信息來控制客戶端的狀態(tài)仑鸥,作為記錄客戶端的狀態(tài)位
通用首部
請(qǐng)求首部
響應(yīng)首部
實(shí)體首部
HTTP報(bào)文組成 —— 體(Body)
體分為請(qǐng)求體和響應(yīng)體吮播,根據(jù)首部的content-type又可以分為單個(gè)整體和多部分組成。
在請(qǐng)求中眼俊,有一些請(qǐng)求方法是沒有請(qǐng)求體的意狠,例如GET、DELETE等泵琳,這些沒有請(qǐng)求體的方法摄职,所有的參數(shù)都作為QueryString參數(shù),保存在請(qǐng)求路徑中获列。在1.1版本中谷市,只有POST和PUT是有請(qǐng)求體的。
content-type
單個(gè)整體
- text/plain 純文本
- application/json 通用且符合標(biāo)準(zhǔn)
- text/json 兼容IE6
- text/html
多部分組成(表單上傳)
multipart /form-data
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
結(jié)語
文章中的內(nèi)容击孩,可能更偏重于行的講解迫悠,對(duì)于首部和體部沒有更深層次的介紹。有興趣的話巩梢,也可以自己再深入研究下创泄。在這里推薦兩個(gè)關(guān)于HTTP的書,一本是《圖解HTTP(上野宣 著 于均良 譯)》括蝠,這個(gè)書講解的比較淺顯易懂鞠抑,更容易理解。另一本是HTTP界的權(quán)威《HTTP權(quán)威指南》忌警,這個(gè)書內(nèi)容更多更全面搁拙,想深入學(xué)習(xí)的可以看一看這本。最后,附上一下《圖解HTTP》 (提取密碼: 8jyg)的PDF版吧箕速,希望有興趣的可以去看一看酪碘。
感謝
文章作為學(xué)習(xí)階段的總結(jié),會(huì)存在許多不足之處盐茎,如有講解錯(cuò)誤之處兴垦,希望可以及時(shí)指出,及時(shí)更正字柠。如果從文章中你獲得了新的知識(shí)探越,得到了新的總結(jié),那這篇胡言亂語募谎,就算是有一絲存在的意義吧扶关。
引用
get、put数冬、post节槐、delete含義與區(qū)別 - - 十五言
HTTP協(xié)議中PUT和POST使用區(qū)別 - 其實(shí)并不難,是你太悲觀 - 博客頻道 - CSDN.NET
四種常見的 POST 提交數(shù)據(jù)方式 | JerryQu 的小站