一. 服務(wù)器與瀏覽器的交互
- 瀏覽器負(fù)責(zé)發(fā)送請求
- 服務(wù)器在 80 端口接收請求
- 服務(wù)器負(fù)責(zé)返回內(nèi)容(響應(yīng))
- 瀏覽器負(fù)責(zé)下載響應(yīng)內(nèi)容
二. HTTP協(xié)議
超文本傳輸??協(xié)議(HTTP)矛渴,指導(dǎo)瀏覽器和服務(wù)器之間通信的應(yīng)用層協(xié)議
HTTP協(xié)議的版本
(1)HTTP/1.0
- 客戶端與web服務(wù)器建立TCP連接后糠馆,每個連接只能發(fā)送一個請求稿茉,發(fā)送數(shù)據(jù)完畢,連接就關(guān)閉叶洞,如果還要請求其他資源蛙吏,就必須再新建一個連接
- 有GET 涉瘾、POST 和HEAD方法
(2)HTTP/1.1(現(xiàn)使用版本)
- 客戶端與WEB服務(wù)器建立連接后要出,在一個連接上可以獲取多個WEB資源。
- GET 倒得、POST 泻红、HEAD、PUT霞掺、PATCH承桥、OPTIONS、DELETE等方法
- 同一個TCP連接里根悼,所有的數(shù)據(jù)通信按次序進(jìn)行凶异。服務(wù)器只能順序處理,可能造成多個請求排隊(duì)挤巡,造成"隊(duì)頭堵塞"剩彬。
- 避免隊(duì)頭堵塞,可以采用兩種方法矿卑,一是減少請求數(shù)喉恋,二是同時多開持久連接
(3)HTTP/2.0
- 復(fù)用TCP連接,在一個連接里,客戶端和瀏覽器都可以同時發(fā)送多個請求或回應(yīng)轻黑,且不用按順序一一對應(yīng)糊肤,避免了“隊(duì)頭堵塞“
- 允許服務(wù)器未經(jīng)請求,主動向客戶端發(fā)送資源氓鄙,即服務(wù)器推送
三. HTTP請求方法
1馆揉、POST
- 向指定的資源提交要被處理的數(shù)據(jù),在請求體中向服務(wù)器發(fā)送請求數(shù)據(jù)
- 提交的數(shù)據(jù)理論上講是沒有大小限制抖拦,HTTP協(xié)議規(guī)范也沒有進(jìn)行大小限制升酣,但實(shí)際上POST 所能傳遞的數(shù)據(jù)量大小取決于服務(wù)器的設(shè)置和內(nèi)存大小,一般不超過2M
- 數(shù)據(jù)類型沒有限制
- POST 請求不會被緩存态罪、不會保留在瀏覽器歷史記錄中噩茄、不能被收藏為書簽
2、GET
- 通過URL請求指定的資源复颈,請求數(shù)據(jù)在URL中對所有人可見绩聘,使用 GET 的請求應(yīng)該只用于獲取數(shù)據(jù)
- 傳輸?shù)臄?shù)據(jù)一般不能超過2K,實(shí)際上耗啦,URL不存在參數(shù)上限的問題凿菩,這個限制是特定的瀏覽器及服務(wù)器對它的限制
- 數(shù)據(jù)類型只允許 ASCII 字符。
- GET 請求可被緩存芹彬、可被收藏為書簽、會保留在瀏覽器歷史記錄中
3叉庐、HEAD
- 與 GET 相同舒帮,但只返回 HTTP 報(bào)頭,不返回文檔主體
- 一個使用場景是在下載一個大文件前先獲取其大小再決定是否要下載陡叠,以此可以節(jié)約帶寬資源
4玩郊、PUT
- 使用請求中的負(fù)載創(chuàng)建或者替換目標(biāo)資源
- PUT方法是冪等的,調(diào)用一次與連續(xù)調(diào)用多次是等價的(即沒有副作用)
5枉阵、DELETE
- 刪除指定資源
四. HTTP請求
1. http請求的一個例子
POST / HTTP/1.1
Host: www.xxx.com
User-Agent: curl/7.54.0
Accept: */*
qqq: xxx
Content-Length: 10
Content-Type: application/x-www-form-urlencoded
1234567890
2. http請求參數(shù)
- 1 動詞 路徑 協(xié)議/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.xxx.com
2 User-Agent: curl/7.54.0
3
4 要上傳的數(shù)據(jù) - 請求最多包含四部分译红,最少包含三部分。(也就是說第四部分可以為空)
- 第三部分永遠(yuǎn)都是一個回車
- 這里的路徑包括「查詢參數(shù)」兴溜,但不包括「錨點(diǎn)」侦厚,如果沒有寫路徑,那么路徑默認(rèn)為 /
- User-Agent:產(chǎn)生請求的用戶代理信息(瀏覽器信息)
- Accept:客戶端可識別的內(nèi)容類型
- Host:請求的主機(jī)名拙徽,允許多個域名同處一個IP地址刨沦,即虛擬主機(jī)
- 第 2 部分中的 Content-Type 標(biāo)注了第 4 部分的格式
- 常見的 Content-Type
text/html HTML格式
text/plain 純文本格式
text/css CSS格式
text/javascript JavaScript格式
application/x-www-form-urlencoded 是常用的表單發(fā)包方式,提交的單數(shù)據(jù)會轉(zhuǎn)換為鍵值對并按照 key1=val1&key2=val2 的方式進(jìn)行編碼
multipart/form-data 常見的 POST 數(shù)據(jù)提交的方式膘怕。我們使用表單上傳文件時想诅,必須讓 form 的 enctype 等于這個值
application/json JSON數(shù)據(jù)格式
application/xml XML數(shù)據(jù)格式
五. HTTP響應(yīng)
1. http響應(yīng)的一個例子
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2443
Content-Type: text/html
Date: Tue, 10 Oct 2017 09:14:05 GMT
Last-Modified: Mon, 23 Jan 2019 13:24:45 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com;
path=/
<!DOCTYPE html>
<!--STATUS OK--><html> <head> 后面太長,省略了……
2. http響應(yīng)參數(shù)
- 1 協(xié)議/版本號 狀態(tài)碼 狀態(tài)解釋
- 2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html - 3
- 4 要下載的內(nèi)容
- 第 2 部分中的 Content-Type 標(biāo)注了第 4 部分的格式
2. http響應(yīng)狀態(tài)碼
(1)概述
- 1** :信息,服務(wù)器收到請求来破,需要請求者繼續(xù)執(zhí)行操作
- 2** :成功篮灼,操作被成功接收并處理
- 3** :重定向,需要進(jìn)一步的操作以完成請求
- 4** :客戶端錯誤徘禁,請求包含語法錯誤或無法完成請求
- 5** :服務(wù)器錯誤诅诱,服務(wù)器在處理請求的過程中發(fā)生了錯誤
(2)常見
- 100: 信息型狀態(tài)響應(yīng)碼表示目前為止一切正常, 客戶端應(yīng)該繼續(xù)請求
- 200:請求成功
- 202 :請求已經(jīng)接收到,但還未響應(yīng)晌坤,沒有結(jié)果
- 300:被請求的資源有一系列可供選擇的回饋信息逢艘,每個都有自己特定的地址和瀏覽器驅(qū)動的商議信息,用戶或?yàn)g覽器能夠自行選擇一個首選的地址進(jìn)行重定向
- 301:被請求的資源已永久移動到新位置骤菠,并且將來任何對此資源的引用都應(yīng)該使用本響應(yīng)返回的若干個 URI 之一
- 302:請求的資源現(xiàn)在臨時從不同的 URI 響應(yīng)請求它改。由于這樣的重定向是臨時的,客戶端應(yīng)當(dāng)繼續(xù)向原有地址發(fā)送以后的請求商乎。只有在Cache-Control或Expires中進(jìn)行了指定的情況下央拖,這個響應(yīng)才是可緩存的
- 400:語義有誤,當(dāng)前請求無法被服務(wù)器理解鹉戚,除非進(jìn)行修改鲜戒,否則客戶端不應(yīng)該重復(fù)提交這個請求;請求參數(shù)有誤抹凳。
- 401: 當(dāng)前請求需要用戶驗(yàn)證
- 403:服務(wù)器已經(jīng)理解請求遏餐,但是拒絕執(zhí)行它
- 404:請求失敗,請求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)
- 408:請求超時
- 500:服務(wù)器遇到了不知道如何處理的情況
- 502:此錯誤響應(yīng)表明服務(wù)器作為網(wǎng)關(guān)需要得到一個處理這個請求的響應(yīng)赢底,但是得到一個錯誤的響應(yīng)
- 504:當(dāng)服務(wù)器作為網(wǎng)關(guān)失都,不能及時得到響應(yīng)時返回此錯誤代碼
參考資料
- MDN
- 個人筆記