一、http
http協(xié)議
1. http協(xié)議特性
1.1 無(wú)狀態(tài)
http是不保存狀態(tài)的協(xié)議,不保存之前的請(qǐng)求和響應(yīng),這樣設(shè)計(jì)是為了確保協(xié)議的可伸縮性,可以快速處理大量事務(wù)
為了驗(yàn)證身份,引入cookie
1.2 持久鏈接(http1.1版本默認(rèn))
在http的早起版本中,由于當(dāng)時(shí)網(wǎng)絡(luò)不這么發(fā)達(dá),網(wǎng)絡(luò)請(qǐng)求密度相對(duì)比較低,所以當(dāng)時(shí)每做一次網(wǎng)絡(luò)請(qǐng)求時(shí),必須連接(三次握手)-請(qǐng)求與相應(yīng)-斷開連接(四次揮手),現(xiàn)在網(wǎng)絡(luò)請(qǐng)求密度非常大,必須滿足一次連接多次請(qǐng)求,所以在http1.1版本中默認(rèn)所有的連接都是持久連接。
1.3 管線化
管線化即并發(fā),持久連接使并發(fā)成為可能。
1.4 內(nèi)容協(xié)商
通俗地來(lái)講就是不同情況不同對(duì)待,比如訪問(wèn)同一個(gè)URI地址,瀏覽器語(yǔ)言默認(rèn)為中文時(shí)我們?cè)L問(wèn)到的是中文頁(yè)面,默認(rèn)語(yǔ)言是英文時(shí)我們?cè)L問(wèn)到英文頁(yè)面。
內(nèi)容協(xié)商會(huì)以語(yǔ)言、字符集、編碼方式等作為基準(zhǔn)判斷響應(yīng)的資源。
2. http方法
http首部
通用首部字段

1.1 Cache-Control 緩存管理
和緩存相關(guān)的指令,可以多個(gè)參數(shù)用’,’分隔:
Cache-Control:private, max-age=0, no-cache
1.1.1 public
響應(yīng)指令:Cache-Control:public。
服務(wù)器返回給某個(gè)客戶端的緩存,也可被其它任意客戶端利用,這個(gè)緩存是公共的。
1.1.2 private
響應(yīng)指令:Cache-Control:private。
服務(wù)器返回給某個(gè)客戶端的緩存,即使其它客戶端需要這樣的數(shù)據(jù),這個(gè)緩存也不會(huì)給其它客戶端用,這個(gè)緩存是私有的。
1.1.3 no-cache
請(qǐng)求和響應(yīng)指令:Cache-Control:no-cache。
客戶端請(qǐng)求:不管緩存是何種情況,我必須從源服務(wù)器中獲取最新的資源,這樣是為了防止拿到過(guò)期的資源。
服務(wù)端響應(yīng):此響應(yīng)緩存服務(wù)器可以把它保存下來(lái),但是每次緩存服務(wù)器要將此響應(yīng)返回給客戶端之前都必須找源服務(wù)器確認(rèn)一下數(shù)據(jù)。
1.1.4 no-store
請(qǐng)求和響應(yīng)指令:Cache-Control:no-store。
對(duì)于客戶端和服務(wù)端而言,該指定規(guī)定緩存不能在任何位置存儲(chǔ)任何東西,我們可以將其看做是不緩存。
1.1.5 max-age
請(qǐng)求和響應(yīng)指令:Cache-Control:max-age=60。
客戶端請(qǐng)求:在第一次請(qǐng)求后的60秒內(nèi),再請(qǐng)求可以直接將緩存給我。等于0時(shí),緩存服務(wù)器需要將請(qǐng)求轉(zhuǎn)發(fā)給源服務(wù)器。
max-age=0和no-cache的區(qū)別:no-cache強(qiáng)制直接向源服務(wù)器請(qǐng)求不經(jīng)過(guò)緩存服務(wù)器,而max-age=0需要經(jīng)過(guò)緩存服務(wù)器。
服務(wù)端響應(yīng):在第一次返回緩存之后的60秒內(nèi)如果緩存服務(wù)器需要返回此緩存時(shí),不需要向源服務(wù)器進(jìn)行確認(rèn)就可以直接發(fā)送。
1.1.6 min-fresh
請(qǐng)求指令:Cache-Control:min-fresh=60。
在這60秒以內(nèi)過(guò)期的資源無(wú)法作為響應(yīng)進(jìn)行返回。
1.1.7 max-stale
請(qǐng)求指令:Cache-Control:max-stale=60。
客戶端在這60秒內(nèi)請(qǐng)求的緩存即使過(guò)期了也可照常接收。
1.1.8 only-if-cached
請(qǐng)求指令:Cache-Control:only-if-cached。
客戶端請(qǐng)求緩存,有緩存則返回,無(wú)緩存返回504狀態(tài)碼。
1.1.9 must-revalidate
響應(yīng)指令:Cache-Control:must-revalidate。
代理會(huì)向源服務(wù)器再次驗(yàn)證即將返回的響應(yīng)緩存是否仍然有效。
1.2 connection
主要有兩個(gè)作用:控制代理不再轉(zhuǎn)發(fā)首部字段,持久鏈接管理
1.2.1 控制代理不再轉(zhuǎn)發(fā)首部字段

1.2.2 持久連接管理
我們知道在http1.1版本中所有連接默認(rèn)是持久連接,如果我們向手動(dòng)地?cái)嚅_連接可以這樣:Connection: close。
為了兼容其它版本的http,我們這樣設(shè)置:Connection: Keep-Alive
1.3 Date
表示創(chuàng)建報(bào)文的日期和時(shí)間
請(qǐng)求首部字段

響應(yīng)首部字段

3.http方法
Http1.1中的請(qǐng)求方法有這些
3.1 GET
請(qǐng)求訪問(wèn)已被URI識(shí)別的資源,請(qǐng)求不需要實(shí)體主體。
3.2 POST
傳輸實(shí)體主體。
3.3 PUT
傳輸文件,本身無(wú)驗(yàn)證機(jī)制,存在安全問(wèn)題。
3.4 DELETE
刪除文件,與PUT相反的方法,也無(wú)驗(yàn)證機(jī)制。
3.5 HEAD
HEAD方法和GET方法一樣用于獲取資源,只是HEAD方法的請(qǐng)求不返回報(bào)文的主體部分。
3.6 OPTIONS
用來(lái)查詢針對(duì)請(qǐng)求URI指定的資源支持的方法(GET?POST?等)。
3.7 TRACE
讓web服務(wù)器端將之前的請(qǐng)求通信返回給客戶端的方法,用于追蹤路徑,請(qǐng)求在各個(gè)代理服務(wù)器之間中轉(zhuǎn)最終到達(dá)目標(biāo)服務(wù)器,在中轉(zhuǎn)時(shí)請(qǐng)求可能會(huì)被篡改。
3.8 CONNECT
要求用隧道協(xié)議連接代理,主要使用SSL和TLS協(xié)議把通信內(nèi)容加密后經(jīng)網(wǎng)絡(luò)隧道傳輸。
4.http狀態(tài)碼

2XX·成功--------------------表示成功處理了請(qǐng)求的狀態(tài)碼
- 200,客戶端請(qǐng)求在服務(wù)器端被正常處理了;
- 201,請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源
- 201,服務(wù)器已經(jīng)接收,但是尚未處理
- 203,服務(wù)器已經(jīng)成功處理了請(qǐng)求,但返回的信息可能來(lái)自另一個(gè)來(lái)源
- 204,請(qǐng)求處理成功了,但沒(méi)有資源可返回;
- 206,對(duì)資源的一部分進(jìn)行請(qǐng)求成功返回;
3XX·重定向
- 301,永久移動(dòng)
- 302,臨時(shí)移動(dòng)
- 304,服務(wù)器內(nèi)容沒(méi)有修改,返回此響應(yīng)時(shí),不會(huì)返回網(wǎng)頁(yè)的內(nèi)容,瀏覽器使用緩存
- 305,使用代理
- 307,臨時(shí)性重定向
4XX·客戶端錯(cuò)誤/請(qǐng)求錯(cuò)誤
- 400,請(qǐng)求報(bào)文中存在語(yǔ)法錯(cuò)誤;
- 401,用戶認(rèn)證失??;
- 403,不允許訪問(wèn)資源;
- 404,找不到資源。
5XX·服務(wù)器錯(cuò)誤
- 500,服務(wù)器內(nèi)部錯(cuò)誤 服務(wù)器內(nèi)部處理異常;
- 503,服務(wù)器不可用 服務(wù)器暫時(shí)處于超負(fù)荷或者正在進(jìn)行停機(jī)維護(hù),無(wú)法處理請(qǐng)求。
- 504,網(wǎng)關(guān)超時(shí)
- 505,http版本不支受支持 服務(wù)器不支持請(qǐng)求中所用的http協(xié)議版本