HTTP協(xié)議
1.HTTP協(xié)議的主要特點
- 簡單快速
每個資源uii都是固定的,一個頁面地址一張圖片叫做統(tǒng)一資源符余爆,這個是固定的斋配, 所以在http協(xié)議中處理也是非常簡單的。我想訪問某一個地址苛预,只要輸入這個uii就可以了句狼;
- 靈活
在http協(xié)議中有一個頭部分會有一個數(shù)據(jù)類型,通過一個http協(xié)議就可以完成不同數(shù)據(jù)類型的傳輸热某。
- 無連接
連接一次它就會斷掉腻菇,不會保持連接;
- 無狀態(tài)
客戶端和服務(wù)端是兩種身份昔馋,客戶端需要向服務(wù)端請求一個圖片筹吐,那么http協(xié)議建立連接,幫你中間傳輸秘遏。這次任務(wù)完成以后丘薛,連接就要斷開了,下次客戶端再過來服務(wù)端是沒法區(qū)分上一次連接和這一次連接是不是同一個身份邦危。因為服務(wù)端是沒有記住你的狀態(tài)的洋侨。單從http協(xié)議上是不能區(qū)分兩次連接者的身份的。
2.HTTP報文的組成部分(有請求有回應(yīng))
瀏覽器向服務(wù)器要一個html文檔或者一個圖片倦蚪,輸入了www.immoc.com(訪問慕課網(wǎng)輸入的uii地址)希坚,相當于客戶端發(fā)出的請求報文;發(fā)出去了陵且,服務(wù)端接收到了以后做出響應(yīng)裁僧,要不要給你這份文檔的內(nèi)容,這個就是響應(yīng)報文慕购;
-
請求報文:
-
請求行(GET/HTTP/1.1)
包含:http方法聊疲、頁面地址、http協(xié)議沪悲、版本 -
請求頭
key获洲、value值來告訴服務(wù)端要那些內(nèi)容,注意哪些類型 -
空行
當遇到空行就知道不在是請求頭部分了殿如,就該當請求體來解析了 - 請求體
-
請求行(GET/HTTP/1.1)
-
響應(yīng)報文:
- 狀態(tài)行(HTTP/1.1 200OK--http狀態(tài)碼)
-
響應(yīng)頭
key贡珊、value值來告訴服務(wù)端要那些內(nèi)容,注意哪些類型 - 空行
-
響應(yīng)體
比如:給的html文檔就是響應(yīng)體部分
3.HTTP方法
GET-------------獲取資源
POST------------傳輸資源
PUT-------------更新資源
DELETE----------刪除資源(一般做業(yè)務(wù)是不刪除資源的)
HEAD------------獲取報文首部
4.POST和GET的區(qū)別
**1握截、GET在瀏覽器回退時是無害的飞崖,而POST會再次提交請求
2、 GET產(chǎn)生的URL地址可以被收藏谨胞,而POST不可以
**3固歪、 GET請求會被瀏覽器主動緩存,而POST不會,除非手動設(shè)置
4牢裳、 GET請求只能進行url編碼逢防,而POST支持多種編碼方式
**5、 GET請求參數(shù)會被完整保留在瀏覽器歷史記錄里蒲讯,而POSt中的參數(shù)不會被保留
--想把參數(shù)留在瀏覽器歷史記錄里用GET忘朝,做業(yè)務(wù)開發(fā)的時候為了防止crsf攻擊,公司里都把GET請求
改成POST判帮,如果業(yè)務(wù)需要把參數(shù)留在瀏覽器歷史記錄中記得把POST改成GET;
**6局嘁、 GET請求在URL中傳送的參數(shù)是有長度限制的(2kb),而POST沒有限制
--如果用的是GET請求晦墙,拼接的url不要太長悦昵,否則會被瀏覽器截斷,因為http協(xié)議對這個長度是
有限制的晌畅,發(fā)不出去但指,導(dǎo)致截斷這種情況,一旦被截斷抗楔,你的服務(wù)器拿不到正確的地址棋凳。
7、對參數(shù)的數(shù)據(jù)類型连躏,GET只接受ASCII字符剩岳,而POST沒有限制
8、GET比POST更不安全反粥,因為參數(shù)直接暴露在URL上卢肃,所以不能用來傳遞敏感信息
**9疲迂、GET參數(shù)通過URL傳遞才顿,POST放在Request body中
5.HTTP狀態(tài)碼
1xx: 提示信息--表示請求已接收,繼續(xù)處理
2xx:成功--表示請求已被成功接收
200 OK:客戶端請求成功
206 Partial Content:客戶端發(fā)送了一個帶有Range(范圍)頭的GET請求尤蒿,服務(wù)器完成了它
(客戶端請求一部分內(nèi)容郑气,在http head頭中有一個range范圍,請求0-10000字節(jié)腰池,服務(wù)器就
返回一個206尾组,服務(wù)器的文件是完整的,這個時候看到range頭示弓,按照range頭從整個文件中截取一部分響應(yīng)
給你讳侨,你響應(yīng)體中只有你range頭中指定的內(nèi)容)
使用video播放視頻地址,audio播放音頻地址奏属,當視頻文件跨跨、音頻文件很大的時候基本都是返回的206;
3xx:重定向--要完成請求必須進行更進一步的操作
301 Moved Permanently:(永久重定向)所請求的頁面已經(jīng)轉(zhuǎn)移至新的url
302 Found: (臨時重定向)所請求的頁面已經(jīng)臨時轉(zhuǎn)移至新的url
304 Not Modified: 客戶端有緩沖的文檔并發(fā)出了一個條件性的請求,服務(wù)器告訴客戶,
原來緩沖的文檔還可以繼續(xù)使用。
--服務(wù)器告訴瀏覽器已經(jīng)有緩存了勇婴,可以直接從緩存中去取文檔用忱嘹,不用去服務(wù)器取了
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現(xiàn)
400 Bad Request:客戶端請求有語法錯誤,不能被服務(wù)器所理解耕渴;
401 Unauthorized:請求未經(jīng)授權(quán)拘悦,這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用;
403 Forbidden:對被請求頁面的訪問被禁止;(資源禁止被訪問)
--看到一個頁面中一個地址橱脸,這個地址真的訪問又不允許直接訪問础米,只能通過服務(wù)器去訪問;
404 Not Found:請求資源不存在;
5xx:服務(wù)器錯誤--服務(wù)器未能實現(xiàn)合法的請求
500 Internal Server Error:服務(wù)器發(fā)生不可預(yù)期的錯誤原來緩沖的文檔還可以繼續(xù)使用添诉;
503 Server Unavailable:請求未完成椭盏,服務(wù)器臨時過載或當機,一段時間后可能恢復(fù)正常吻商;
6.HTTP持久連接(HTTP是支持持久連接的掏颊,1.1版本才支持,HTTP 1.0版本不支持)
-
非持久連接:
HTTP協(xié)議采用“請求--應(yīng)答”模式艾帐,當使用普通模式乌叶,即非Keep-Alive(持久連接)模式時,每個請求/應(yīng)答客戶端和服務(wù)器都要新建一個連接柒爸,完成之后立即斷開連接(HTTP協(xié)議為無連接的協(xié)議)准浴;
-
持久連接:
當使用Keep-Alive模式(持久連接、連接重用)時捎稚,Keep-Alive功能使客戶端到服務(wù)器端的連接持續(xù)有效乐横,當出現(xiàn)對服務(wù)器的后繼請求時,Keep-Alive 功能避免了建立或者重新建立連接今野。
7.什么是管線化
(請求和響應(yīng)共用一個通道葡公,這個通道是持久建立的,不是我請求一次你響應(yīng)一次条霜,而是把請求打包一次傳輸過去催什,你也打包一次響應(yīng)過來)
在使用持久連接的情況下,某個連接上消息的傳遞類似于:
--請求1-->響應(yīng)1-->請求2-->響應(yīng)2-->請求3-->響應(yīng)3(表示整個連接沒有中斷過)
某個連接上的消息變成了類似這樣:(持久連接情況下完成的管線化)
請求1-->請求2-->請求3-->響應(yīng)1-->響應(yīng)2-->響應(yīng)3
1.管線化機制通過持久連接完成宰睡,僅HTTP/1.1支持此技術(shù);
2.只有GET和HEAD請求可以進行管線化蒲凶,而POST則有所限制;
3.初次創(chuàng)建連接時不應(yīng)啟動管線機制,因為對方(服務(wù)器)不一定支持HTTP/1.1版本的協(xié)議;
4.管線化不會影響響應(yīng)到來的順序拆内,如上面的例子所示旋圆,響應(yīng)返回的順序并未改變;
5.HTTP/1.1要求服務(wù)器端支持管線化,但并不要求服務(wù)器端也對響應(yīng)進行管線化處理麸恍,只是要
求對于管線化的請求不失敗即可;
6.由于上面提到的服務(wù)器端問題灵巧,開啟管線化很可能并不會帶來大幅度的性能提升,而且很多服務(wù)器端
和代理程序?qū)芫€化的支持并不好,因此現(xiàn)代瀏覽器如 Chrome 和 Firefox 默認并未開啟管線化支持孩等;
總結(jié): 1.工作原理:將請求響應(yīng)打包回來艾君;
特點:通過持久連接完成,需要HTTP/1.1支持肄方;
2.只有GET和HEAD請求可以進行管線化冰垄,POST有所限制;
3.連接的時候不要啟動管線限制权她,因為對方可能不支持虹茶;(這是初次連接的時候)