HTTP協(xié)議規(guī)定,請(qǐng)求從客戶(hù)端發(fā)出,最后服務(wù)器端響應(yīng)請(qǐng)求并返回厢破。
HTTP是不保存狀態(tài)的協(xié)議
- HTTP協(xié)議是一種不保存狀態(tài),即無(wú)狀態(tài)協(xié)議治拿,對(duì)請(qǐng)求和響應(yīng)都不做持久化處理摩泪。
- 優(yōu)點(diǎn):可以更快的處理大量事物,確保協(xié)議的可伸縮性劫谅。
- 缺點(diǎn):例如:登錄一個(gè)網(wǎng)站后见坑,當(dāng)頁(yè)面發(fā)生跳轉(zhuǎn)后,沒(méi)辦法保持前一個(gè)頁(yè)面的登錄狀態(tài)捏检。
- 解決辦法:Cookie技術(shù)荞驴。
Cookie
Cookie技術(shù)通過(guò)在請(qǐng)求和響應(yīng)報(bào)文中寫(xiě)入Cookie信息來(lái)控制客戶(hù)端的狀態(tài)。
Cookie會(huì)根據(jù)從服務(wù)器端發(fā)送的響應(yīng)報(bào)文內(nèi)的一個(gè)叫做Set-Cookie的首部字段信息贯城,通知客戶(hù)端保存Cookie熊楼,當(dāng)下次客戶(hù)端再往該服務(wù)器發(fā)送請(qǐng)求時(shí),客戶(hù)端會(huì)自動(dòng)在請(qǐng)求報(bào)文中加入Cookie值后發(fā)送出去能犯。服務(wù)器端發(fā)現(xiàn)客戶(hù)端發(fā)送過(guò)來(lái)的Cookie后鲫骗,會(huì)去檢查究竟是從哪一個(gè)客戶(hù)端發(fā)來(lái)的連接請(qǐng)求犬耻,然后對(duì)比服務(wù)器上的記錄,最后得到之前的狀態(tài)信息挎峦。
請(qǐng)求報(bào)文(沒(méi)有Cookie信息的狀態(tài))
GET / reader / HTTP/1.1
Host:hackr.jp
響應(yīng)報(bào)文(服務(wù)器端生成Cookie信息)
HTTP/1.1 200 OK
....
<Set-Cookie:sid = 1342077140226742; path= /; expires = Wed,10-Oct-12, 07:12:20 GMT>
請(qǐng)求報(bào)文(自動(dòng)發(fā)送保存著Cookie的信息)
GET / reader / HTTP/1.1
Host:hackr.jp
Cookie:sid = 1342077140226742
持久連接
- HTTP/1.1和部分HTTP/1.0提出了持久連接香追。
- 特點(diǎn):只要任意一端沒(méi)有明確提出斷開(kāi)連接,則保持TCP連接狀態(tài)坦胶。
- 優(yōu)點(diǎn):
- 減少了TCP連接的重復(fù)建立和斷開(kāi)的次數(shù)透典;
- 減少了服務(wù)器端的負(fù)載;
- HTTP請(qǐng)求和響應(yīng)結(jié)束的時(shí)間更短顿苇。
- 管線(xiàn)化:
持久連接請(qǐng)求的方式:管線(xiàn)化峭咒。發(fā)送一個(gè)請(qǐng)求后,不需要等待響應(yīng)纪岁,可以繼續(xù)發(fā)送請(qǐng)求凑队,所以可以做到同時(shí)并行發(fā)送多個(gè)請(qǐng)求,使得請(qǐng)求響應(yīng)過(guò)程明顯加快幔翰。
常見(jiàn)Http方法
HTTP協(xié)議使用URI定位互聯(lián)網(wǎng)上的資源漩氨。常見(jiàn)的方法有:GET、POST遗增、PUT叫惊、HEAD、DELETE做修、OPTIONS霍狰、TRACE、CONNECT饰及、LINK蔗坯、UNLINK\
GET:獲取資源
GET方法用來(lái)請(qǐng)求訪(fǎng)問(wèn)的已被URI識(shí)別的資源,指定的資源經(jīng)服務(wù)器端解析后返回響應(yīng)內(nèi)容燎含。
瀏覽器導(dǎo)航欄輸入的地址按回車(chē)宾濒,其實(shí)就是get 請(qǐng)求。
POST :傳輸實(shí)體主體
POST方法用來(lái)傳輸實(shí)體的主體屏箍,POST的主要目的不是獲取響應(yīng)的主體內(nèi)容绘梦,而是向服務(wù)器發(fā)送數(shù)據(jù)。
GET和POST的區(qū)別:
- get的請(qǐng)求參數(shù)會(huì)拼接到URL上铣除,post的請(qǐng)求參數(shù)是不展現(xiàn)在URL上。
- 瀏覽器會(huì)自動(dòng)截取URL的長(zhǎng)度鹦付,為防止內(nèi)容丟失尚粘,傳送大量數(shù)據(jù)的時(shí)候,用post郎嫁。
- 安全性:get方式提交用戶(hù)名密碼的時(shí)候秉继,URL會(huì)展現(xiàn)出來(lái)尚辑,而且瀏覽器的歷史記錄中也會(huì)存在杠茬。請(qǐng)求到達(dá)服務(wù)器之后弛随,請(qǐng)求日志也會(huì)看到。容易造成密碼的泄露栓票。
- get要數(shù)據(jù)愕够,post給數(shù)據(jù)。
PUT:傳輸文件
PUT方法用來(lái)傳輸文件坠狡,要求在請(qǐng)求報(bào)文的主體中包含文件的內(nèi)容擦秽,然后保存到請(qǐng)求的URI指定的位置漩勤。
HTTP/1.1的PUT方法自身不帶驗(yàn)證機(jī)制越败,存在安全問(wèn)題,不經(jīng)常使用置谦,但是若配合Web應(yīng)用程序的驗(yàn)證機(jī)制亿傅,或架構(gòu)設(shè)計(jì)采用REST標(biāo)準(zhǔn)的同類(lèi)Web網(wǎng)站葵擎,即可使用。
HEAD:獲得報(bào)文首部
HEAD方法和GET方法一樣签餐,只是不返回報(bào)文的主體部分,用于確認(rèn)URI的有效性及資源更新的日期和時(shí)間等戒良。
DELETE
DELETE方法用來(lái)刪除文件糯崎,限制性同PUT方法耗拓。
OPTIONS:詢(xún)問(wèn)支持的方法
OPTIONS方法用來(lái)查詢(xún)針對(duì)請(qǐng)求的URI指定的資源支持的方法乔询。
TRACE:追蹤路徑
TRACE方法是讓W(xué)eb服務(wù)器端將之前的請(qǐng)求通信返回給客戶(hù)端的方法竿刁。
缺點(diǎn):容易引起XST(跨站追蹤)攻擊。
不常用
CONNECT:要求用隧道協(xié)議連接代理
CONNECT方法要求在與代理服務(wù)器通信時(shí)建立隧道鸵熟,實(shí)現(xiàn)用隧道協(xié)議進(jìn)行TCP通信负甸。
不常用
RESTful API:
- 表現(xiàn)層狀態(tài)轉(zhuǎn)換(Representational State Transfer呻待,縮寫(xiě):REST)蚕捉,API設(shè)計(jì)規(guī)范。后端設(shè)計(jì)URL的設(shè)計(jì)規(guī)范秘通。
- HTTP方法與對(duì)應(yīng)數(shù)據(jù)庫(kù)增刪改查對(duì)應(yīng)
- GET:讀确蜗 (Read)
- POST:新建(Create)
- PUT:更新(Update)
- PATCH:更新(Update),通常是部分更新
- DELETE:刪除(Delete)
- 范例
- GET /books , 列出所有的圖書(shū)
- POST /books , 創(chuàng)建一本圖書(shū)
- PUT /books, 批量更新圖書(shū)信息
- DELETE /books, 刪除所有圖書(shū)
- GET /books/10话原, 獲取10號(hào)圖書(shū)詳細(xì)信息
- PUT /books/10稿静, 更新10號(hào)圖書(shū)
- PATCH /books/10辕狰, 更新10號(hào)圖書(shū)
- DELETE /books/10, 刪除10號(hào)圖書(shū)
PUT和PATCH有什么差別?
- 對(duì)于
{
"username": "hunger"
"email": "hunger@jirengu.com"
}
- PUT修改傳參悬钳,需包含全部參數(shù)
{
"username": "hunger"
"email": "hunger@vip.qq.com"
}
- PATCH修改傳參默勾,只需要傳遞需要修改的參數(shù)
{
"email": "hunger@vip.qq.com"
}
- 另外推薦在URL中強(qiáng)制加入版本號(hào)母剥,如
GET /v1/books
Form表單支持哪些方法
在form表單只支持 post 和get形导。再發(fā)AJAX請(qǐng)求時(shí)朵耕,以上都是可以接受的。也可以通過(guò)變通的方法伪阶,讓服務(wù)器知道你本意是想做什么栅贴。
<form action="/books" method="POST">
<input type="hidden" name="_method" value="PUT">
</form>
靜態(tài)服務(wù)器案例:
- 需求
線(xiàn)上機(jī)器锰霜,外網(wǎng)IP:10.15.20.38
輸入這個(gè)IP地址的時(shí)候癣缅,會(huì)有一條HTTP的請(qǐng)求報(bào)文到達(dá)這個(gè)機(jī)器友存。
在這個(gè)機(jī)器上可以上傳文件,例如:abc.html
http://10.15.20.38:80/abc.html
結(jié)果就是輸入http://10.15.20.38:80/abc.html之后直晨,可以在瀏覽器看到頁(yè)面上的內(nèi)容罩句。
GET /abc.html HTTP/1.1 - 解決步驟(靜態(tài)服務(wù)器)
- abc.html门烂,上傳到10.15.20.38的/usr/local/www(上傳到機(jī)器的文件夾下)
- 寫(xiě)一個(gè)服務(wù)器兄淫,監(jiān)聽(tīng)80端口。(服務(wù)器其實(shí)就是一個(gè)應(yīng)用程序慨丐,會(huì)時(shí)刻掃描端口房揭,當(dāng)端口收到了HTTP報(bào)文后崩溪,才可以進(jìn)行處理斩松。)
- 服務(wù)器聽(tīng)到請(qǐng)求,進(jìn)行處理
-- 請(qǐng)求的方法什么乳幸?
-- 請(qǐng)求的path是/abc.html(此處還可以對(duì)path進(jìn)行判斷粹断。)
-- 服務(wù)器去讀/usr/local/www/abc.html瓶埋,拿出里面的數(shù)據(jù)
-- 響應(yīng)給客戶(hù)端(里面除了數(shù)據(jù)之外养筒,還有其他信息晕粪,比如告訴客戶(hù)端這是一個(gè)html) - 瀏覽器收到響應(yīng)數(shù)據(jù)巫湘,數(shù)據(jù)類(lèi)型是html,用html的方式渲染展示。
若是:http://lill.com/abc.html - 買(mǎi)一臺(tái)服務(wù)器诀诊,獲得外網(wǎng):10.15.20.38
- 購(gòu)買(mǎi)一個(gè)域名畏梆,lill.con
- 配置域名及解析到10.15.20.38。
把信息提交給域名服務(wù)商磷杏。