HTTP協(xié)議學(xué)習(xí)總結(jié)
友情提示,本文檔的圖床使用極簡(jiǎn)圖床進(jìn)行圖片存儲(chǔ),默認(rèn)存儲(chǔ)到七牛云空間
本文是對(duì)HTTP協(xié)議詳解的學(xué)習(xí)記錄貼,非原創(chuàng),向原作者致敬!!
正文
HTTP是超文本傳輸協(xié)議,并非某種技術(shù)
HTTP的網(wǎng)絡(luò)傳輸實(shí)現(xiàn)依靠的是TCP協(xié)議
MIME類型有上千種,是一種文本標(biāo)記,用
對(duì)象類型/子類型
表示:xml文檔 .xml text/xml
-
URL是全球唯一定位符,有兩種方式
- URL
組成方式:協(xié)議://ip地址:端口號(hào)(可省略)/資源標(biāo)識(shí)符?參數(shù)
舉個(gè)栗子:https://portal.qiniu.com/bucket/weihao/index- URN
常用來做下拉菜單,不常用
-
HTTP的請(qǐng)求方法 不光有 get和post兩種,具體分為以下:
- HEAD 獲得服務(wù)器頭部 不含主體
- GET 從服務(wù)器獲得文檔 不含主體
- POST 向服務(wù)器提交數(shù)據(jù) 包含主體
- PUT 請(qǐng)求存儲(chǔ)在服務(wù)器 包含主體
- DELETE 從服務(wù)器刪除文檔 不包含主體
- TRACE 從服務(wù)器獲得報(bào)文跟蹤 不包含主體
- OPTIONS 決定服務(wù)器操作類型 不包含主體
HTTP的工作方式
客戶端發(fā)送<font color='red' >request</font>請(qǐng)求到<font color='red' face='宋體'>服務(wù)端</font>,通報(bào)報(bào)文方式,服務(wù)器端返回結(jié)果(json格式或者h(yuǎn)tml標(biāo)簽)給客戶端瀏覽器,瀏覽器進(jìn)行解析后展示數(shù)據(jù)或者<font color='red'>頁面元素</font>-
HTTP狀態(tài)碼 代表了服務(wù)器的返回結(jié)果的標(biāo)識(shí),常用的有以下幾個(gè):
- 200 請(qǐng)求成功并返回
- 302 請(qǐng)求被重定向 返回頭有l(wèi)ocation確定重定向地址
- 304 上次請(qǐng)求被緩存,這次直接在緩存中獲取 很多<font color ='red'>靜態(tài)文件</font>會(huì)被緩存
如果你不想使用緩存數(shù)據(jù),比如很多js或者css被修改了可以使用
ctrl+F5
進(jìn)行強(qiáng)制刷新瀏覽器- 400 提交的參數(shù)和服務(wù)器映射方法接受的參數(shù)不一致 (4開頭為客戶端錯(cuò)誤)
- 403 服務(wù)器接收到了請(qǐng)求,但是拒絕提供服務(wù)
- 404 頁面不存在
- 500 服務(wù)器處理請(qǐng)求時(shí)內(nèi)部發(fā)生了錯(cuò)誤
- 503 服務(wù)端暫時(shí) 不能正確處理,稍后可能會(huì)恢復(fù)(比如部署IIS,webconfig有問題的時(shí)候會(huì)報(bào))
-
HTTP報(bào)文(F12后的請(qǐng)求詳情頁)
按照接收方和發(fā)送方可以分為:
- 請(qǐng)求報(bào)文
- 相應(yīng)報(bào)文
-
HTTP的報(bào)文組成
- 請(qǐng)求行
- 請(qǐng)求頭
- 報(bào)文體
其中1,2,3組成了請(qǐng)求行,既請(qǐng)求地址,請(qǐng)求方法,和網(wǎng)絡(luò)協(xié)議
4是具體的請(qǐng)求頭,里面的內(nèi)容采用鍵值對(duì)的方式進(jìn)行表示
參數(shù)是報(bào)文體,用來攜帶請(qǐng)求參數(shù),也可以通過get方式的?后攜帶
對(duì)于HTTP的get請(qǐng)求有個(gè)顯著的特點(diǎn)就是 body是空的
-
TCP/IP是HTTP的傳輸依賴.HTTP處于TCP/IP的應(yīng)用層范圍
TCP/IP的層分類- 網(wǎng)絡(luò)接口層
- 網(wǎng)絡(luò)層
- 傳輸層
- 應(yīng)用層
TCP的補(bǔ)充說明:
HTTP
位于TCP的上層,TCP
其實(shí)也位于IP
的上層.
HTTP協(xié)議發(fā)送報(bào)文前需要 建立TCP/IP連接,其中IP地址類似于小區(qū)地址,而端口號(hào)相當(dāng)于門牌號(hào),兩者確定唯一的網(wǎng)絡(luò)地址
HTTP代理是位于服務(wù)器和客戶端中間實(shí)體,作為中間人角色轉(zhuǎn)發(fā)HTTP請(qǐng)求
對(duì)代理服務(wù)器的補(bǔ)充: 目前HTTP支持兩種發(fā)送方式
方式一 服務(wù)端和客戶端直連
方式二 服務(wù)端和客戶端無法直接連接,需要通過代理服務(wù)器 連接,以突破網(wǎng)絡(luò)限制
代理服務(wù)器的訪問不僅可以突破IP網(wǎng)絡(luò)限制,而且可以提高網(wǎng)速,原理是,當(dāng)大部分請(qǐng)求url相同時(shí),網(wǎng)絡(luò)代理服務(wù)器一般會(huì)做緩存處理
下一次其他用戶訪問時(shí),緩存會(huì)大大提高訪問速度代理服務(wù)器
也可以隱藏真實(shí)IP地址HTTP請(qǐng)求時(shí)無狀態(tài)的.對(duì)于來自同一個(gè)客戶端的兩次相同請(qǐng)求,http服務(wù)器分辨不出,所以引入了<font color='red'>Cookie(緩存)</font>的概念
一個(gè)請(qǐng)求無法返回呈現(xiàn)出的頁面,但請(qǐng)求返回的html中有其他引用,比如
jpg
,css
,javascript
等靜態(tài)文件時(shí),客戶端會(huì)再次發(fā)送請(qǐng)求
-
Request頭詳細(xì)信息:
-
<font color='red'size='4'>cache頭域</font>
-
If-Modified-Since
客戶端第一次發(fā)送請(qǐng)求時(shí)會(huì)緩存頁面到本地文件,并記錄文件修改時(shí)間,第二次發(fā)送時(shí)會(huì)將該時(shí)間作為比對(duì)字符串和服務(wù)器返回的Last-Modified(最后修改時(shí)間)做比較
如果時(shí)間相同,則使用本地緩存,如果時(shí)間不同,則替換本地文件并保存緩存 -
If-None-Match
該參數(shù)在HTTP1.1協(xié)議上產(chǎn)生,是為了更精準(zhǔn)的細(xì)化確定緩存資源,If-Modified-Since因?yàn)椴捎玫臅r(shí)間戳,所以精度有限,只精確到秒,所以只適用于不經(jīng)常變化的靜態(tài)資源文件. 這個(gè)參數(shù)需要和response頭信息中的`Etag`配合驗(yàn)證,在第一次請(qǐng)求時(shí),服務(wù)器會(huì)設(shè)置Etag,之后用于二次請(qǐng)求時(shí)的驗(yàn)證依據(jù)
關(guān)于該參數(shù)的具體使用,請(qǐng)參考REST筆記(五):你應(yīng)該知道的HTTP頭------ETag
-
cache-control
該參數(shù)是用來指定response
頭的緩存機(jī)制![](http://or316jtnw.bkt.clouddn.com//17-8-22/48059186.jpg) 常用的配置是:
Cache-Control:Public
可以被任何緩存所緩存()Cache-Control:Private
內(nèi)容只緩存到私有緩存中Cache-Control:no-cache
所有內(nèi)容都不會(huì)被緩存 (對(duì)于每次返回的數(shù)據(jù)不同的請(qǐng)求)
-
-
<font color='red'size='4'>cache頭域</font>
-
<font color='red'size='4'>Clint頭域(瀏覽器聲明部分)</font>
Accept
客戶端發(fā)送請(qǐng)求時(shí),告訴服務(wù)端 接受什么樣的返回?cái)?shù)據(jù),*/*
代表接受所有類型參數(shù),如果不做特別處理,一般瀏覽器的Accept接受*/*
(比如AJAX特別指定參數(shù)類型)Accept-Language
瀏覽器聲明的自己可以接受的語言類型Accept-Encoding
瀏覽器聲明的可以接受的壓縮方式User-Agent
告訴服務(wù)器當(dāng)前客戶端的操作系統(tǒng)的版本號(hào),位數(shù)及瀏覽器的相關(guān)信息
-
<font color='red'size='4'>Cookie/Login 頭域</font>
將cookie值發(fā)送給服務(wù)器,在header
信息中屬于重要的級(jí)別 -
<font color='red'size='4'>Entity頭域</font>
Content-Type
描述發(fā)送或者接受的實(shí)體類型Content-Length
描述發(fā)送或者接受的實(shí)體長度
-
<font color='red'size='4'>Miscellaneous 頭域</font>
提供了上下文服務(wù)器地址,可以通過Referer
參數(shù)查詢?cè)撴溄拥漠a(chǎn)生是通過何種路徑引導(dǎo)過來的(上個(gè)訪問的服務(wù)器地址)
-
<font color='red'size='4'>Transport 頭域</font>
Host
發(fā)送請(qǐng)求時(shí)的必備參數(shù)之一, 指定了請(qǐng)求資源的internet地址和端口號(hào)(端口號(hào)可以省略)Connection
指定了獲取TCP/IP連接后的處理方式 分為以下兩種Connection: keep-alive
完成請(qǐng)求后,TCP/IP連接保持連接,當(dāng)有新的請(qǐng)求產(chǎn)生時(shí),依然使用該TCP/IP連接Connection: close
當(dāng)一個(gè)請(qǐng)求完成后,立馬關(guān)掉TCP/IP請(qǐng)求,當(dāng)有新的請(qǐng)求產(chǎn)生時(shí),會(huì)重新進(jìn)行TCP/IP連接
-
Response頭詳細(xì)信息:
-
<font color='red'size='4'>cache頭域</font>
-
Data
生成消息的具體時(shí)間和日期
-
Expires
緩存過期時(shí)間設(shè)置(多用于靜態(tài)資源)
-
-
<font color='red'size='4'>Cookie/Login頭域</font>
-
P3P
作用: 用于跨域設(shè)置Cookie, 這樣可以解決iframe跨域訪問cookie的問題
- Set-Cookie
非常重要的header, 用于把cookie 發(fā)送到客戶端瀏覽器踊淳, 每一個(gè)寫入cookie都會(huì)生成一個(gè)Set-Cookie.
- Set-Cookie
-
-
<font color='red'size='4'>Entity頭域</font>
- ETag
詳情參考 request頭中的If-None-Match
- Last-Modified
詳情參考 request頭中的'If-Modified-Since' - Content-Type
描述了 服務(wù)器返回的實(shí)體類型 - Content-Length
描述了實(shí)體長度 - Content-Encoding
描述了服務(wù)端的壓縮方式 - Content-Language
描述了服務(wù)端返回的語言類型
- ETag
-
<font color='red'size='4'>Miscellaneous 頭域</font>
-
Server:
作用:指明HTTP服務(wù)器的軟件信息
例如:Server: Microsoft-IIS/7.5 或者 Apache
X-AspNet-Version
如果.net平臺(tái)開發(fā),會(huì)有這個(gè)選項(xiàng),說明了.net的版本號(hào)-
X-Powered-By:
說明了服務(wù)端采用的后臺(tái)編程語言類型 ,下圖中百度采用的是HPHP
-
-
<font color='red'size='4'>Transport頭域</font>
本部分和request對(duì)應(yīng)的該部分內(nèi)容相同,請(qǐng)翻閱參考<font color='red'size='4'>Location頭域</font>
location
用來描述304的具體重定向url地址
- HTTP1.1的默認(rèn) TCP連接方式是保持TCP/IP連接,連接時(shí)間取決于發(fā)布服務(wù)器平臺(tái)(比如APACHE,IIS等的詳細(xì)設(shè)置)
Connection:keep-active
隨筆