特性:
1.建于TCP/IP協(xié)議上,端口80.
2.無連接(沒有任何預(yù)先聯(lián)系就發(fā)送消息,每次連接只處理一個(gè)請(qǐng)求)
3.無狀態(tài)(服務(wù)器根據(jù)請(qǐng)求,會(huì)給我們發(fā)送數(shù)據(jù)過來,但是,發(fā)送完,不會(huì)記錄任何信息)
HTTP報(bào)文
請(qǐng)求報(bào)文
HTTP定義了與服務(wù)器交互的各種方法,基本有4種:GET、POST、PUT、DELETE。URL全稱資源描述符。一個(gè)URL地址,描述一個(gè)網(wǎng)絡(luò)資源,GET、POST、PUT、DELETE 則對(duì)應(yīng)著查、改、增、刪。
1.GET用于信息獲取,不會(huì)修改原有信息,對(duì)同一URL進(jìn)行多次請(qǐng)求,結(jié)果一樣 提交的數(shù)據(jù)量受URL長(zhǎng)度限制。因?yàn)檎?qǐng)求信息放在URL里。這導(dǎo)致GET請(qǐng)求容易被他人獲取
2.POST可能修改服務(wù)器的資源請(qǐng)求。提交的數(shù)據(jù)量理論上無大小限制,但服務(wù)器一般會(huì)進(jìn)行限制。請(qǐng)求信息放在HTTP爆的包體里
響應(yīng)報(bào)文
和HTTP請(qǐng)求一樣,有三部分組成
- 狀態(tài)行
- 響應(yīng)頭
- 響應(yīng)正文
狀態(tài)行由協(xié)議版本、數(shù)字形式的狀態(tài)代碼、控狀態(tài)描述組成,以空格分隔。
條件GET
優(yōu)點(diǎn):減少帶寬浪費(fèi)。
使用時(shí)機(jī):客戶端再次訪問某資源。
使用方法:客戶端向服務(wù)器發(fā)送一個(gè)包,詢問是否更新了資源。若沒有,就使用本地緩存;若更新就發(fā)送更新的資源給客戶端。
持久連接
HTTP采用“請(qǐng)求-應(yīng)答”模式,若不使用Keep-Alive模式,每個(gè)請(qǐng)求-應(yīng)答客戶端和服務(wù)器都要重新建一個(gè)連接,完成再斷開。(HTTP協(xié)議為無連接協(xié)議)
使用Keep-Alive時(shí),客戶端和服務(wù)器建立的連接持續(xù)有效。
HTTP1.0中,沒有官方規(guī)定Keep-Alive實(shí)際上是被附加到HTTP1.0協(xié)議中的。若客戶端支持Keep-Alive,HTTP請(qǐng)求頭中加入Connection:Keep-Alive,客戶端收到后,在響應(yīng)頭中添加Connection:Keep-Alive。這樣HTPP連接就會(huì)被保持,不會(huì)斷開(超過Keep-Alive規(guī)定時(shí)間或地震、火災(zāi)等意外事件除外)。
HTTP1.1默認(rèn)所有連接都被保持,若加入Connection:close才關(guān)閉,現(xiàn)在大部分瀏覽器都使用HTTP1.1協(xié)議
注意:Keep-Alive不能保證連接一定是活躍的,但連接關(guān)閉時(shí)會(huì)收到通知。所有不能讓程序依賴Keep-Alive的保持連接特性。
HTTP管線化 (HTTP Pipelining)
默認(rèn)情況下HTTP協(xié)議傳輸層連接只能承載一個(gè)HTTP請(qǐng)求和響應(yīng),瀏覽器在收到上一個(gè)請(qǐng)求的響應(yīng)后,再發(fā)送下一個(gè)請(qǐng)求。使用持久連接,連接的消息傳遞如下:請(qǐng)求1->響應(yīng)1->請(qǐng)求2->響應(yīng)2->請(qǐng)求3...
HTTP Pipelining是將多個(gè)HTTP請(qǐng)求整批提交的技術(shù),傳送過程不需要等待服務(wù)器回應(yīng) :請(qǐng)求1->請(qǐng)求2->請(qǐng)求3->響應(yīng)1->請(qǐng)求2->響應(yīng)3.
注意
- 光纖化HTTP/1.0不支持
- 只有GET和HEAD請(qǐng)求可以管線化,post有限制
- 初次創(chuàng)建連接不要用管線化,因?yàn)榉?wù)器不一定支持HTTP1.1協(xié)議版本
- 開啟管線化很可能不會(huì)有大幅的性能提升
會(huì)話跟蹤
會(huì)話:客戶端與服務(wù)器的連接發(fā)出請(qǐng)求到服務(wù)器響應(yīng)客戶端的請(qǐng)求的全過程
會(huì)話跟蹤:對(duì)同一個(gè)用戶對(duì)服務(wù)器的連續(xù)的請(qǐng)求和接受響應(yīng)的監(jiān)視。
作用:HTTP是無狀態(tài)協(xié)議,不能保存信息,不能判斷是否是同一個(gè)用戶。會(huì)話跟蹤可以實(shí)現(xiàn)
常用方法:
1.URL重寫:在URL結(jié)尾附加數(shù)據(jù)標(biāo)識(shí)該會(huì)話,便于服務(wù)器識(shí)別
2.隱藏表單域:將會(huì)話ID添加到HTML表單元素中提交到服務(wù)器。此表單元素不在客戶端顯示
3.Cookie:Cookie是Web服務(wù)器發(fā)給客戶端的一小段信息,客戶端請(qǐng)求時(shí)讀取該信息發(fā)送到服務(wù)器端,以此識(shí)別用戶。客戶端每次請(qǐng)求,服務(wù)器都會(huì)發(fā)送Cookie,客戶端進(jìn)行保存,以便下次使用。
保存Cookie有兩種:1。保存在客戶端內(nèi)存,臨時(shí)Cookie,瀏覽器關(guān)閉后Cookie消失,2.保存在磁盤里,永久Cookie。
Cookie可以被禁止的
4.Session 每個(gè)用戶都有不同的Session,用戶不能共享。Session可以存放信息,服務(wù)器端創(chuàng)建一個(gè)session對(duì)象,將這個(gè)sessionI放入到Cookie中發(fā)送到客戶端,下次訪問,對(duì)session就行識(shí)別。
若Cookie被禁止,Session也不能用
跨站攻擊
- CSRF(跨站請(qǐng)求偽造)
偽造請(qǐng)求,冒充用戶在站內(nèi)支持操作。
CSRF應(yīng)對(duì)方法 - 關(guān)鍵操作只 接受POST請(qǐng)求
- 驗(yàn)證碼
- Token
Token使用原則:- 1.token不可測(cè)算。
- 2.Token一次性
- 3.Token注意保密,敏感操作用POST,防止出現(xiàn)在URL中
注意:過濾請(qǐng)求的來源,而不是過濾用戶的輸入內(nèi)容