HTTP協(xié)議定義
http是一個(gè)客戶端和服務(wù)器端請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)阐污,客戶端是終端用戶休涤,服務(wù)器端是網(wǎng)站。通過(guò)使用web瀏覽器笛辟,網(wǎng)絡(luò)怕從或者其他的工具功氨,客戶端發(fā)起一個(gè)到服務(wù)器上指定端口(默認(rèn)80端口)的http請(qǐng)求,這個(gè)客戶端也被叫做用戶代理(user agent)手幢,應(yīng)答的服務(wù)器上存儲(chǔ)著一些數(shù)據(jù)捷凄,我們稱這個(gè)應(yīng)答服務(wù)器為源服務(wù)器,在用戶代理和源服務(wù)器中間可能存在多個(gè)中間層围来,比如代理跺涤,網(wǎng)管,或者隧道监透,盡管TCP/IP協(xié)議是互聯(lián)網(wǎng)上最流行的應(yīng)用桶错,HTTP協(xié)議并沒(méi)有規(guī)定必須使用他們,HTTP可以在任何其他互聯(lián)網(wǎng)協(xié)議上胀蛮,http只假定(其下層協(xié)議提供)可靠的傳輸院刁,任何能夠提供這種保證的協(xié)議都可以被使用,HTTP使用TCP而不是UDP的原因在于(打開(kāi))一個(gè)網(wǎng)頁(yè)必須傳送很多數(shù)據(jù)粪狼,而TCP協(xié)議提供傳輸控制退腥,按順序組織數(shù)據(jù),和錯(cuò)誤糾正
HTTP協(xié)議功能
HTTP協(xié)議是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議再榄,它可以使瀏覽器更加高效狡刘,使網(wǎng)絡(luò)傳輸減少,它不僅保證計(jì)算機(jī)正確快速的傳輸超文本文檔困鸥,還確定傳輸文檔中的那一部分嗅蔬,以及哪部分內(nèi)容首先顯示(如文本先與圖形)等 HTTP是客戶端瀏覽器或其他程序與Web服務(wù)器之間的應(yīng)用層通信協(xié)議,在因特網(wǎng)上的web服務(wù)器上存放的都是超文本信息,客戶機(jī)需要通過(guò)HTTP協(xié)議傳輸要訪問(wèn)的超文本信息购城,HTTP包含命令和傳輸信息吕座,所以也可以同于其他因特網(wǎng)/內(nèi)聯(lián)網(wǎng)應(yīng)用系統(tǒng)之間的通信虐译,從而實(shí)現(xiàn)各類應(yīng)用資源超媒體訪問(wèn)的集成瘪板,我們?cè)跒g覽器的地址欄里輸入的網(wǎng)站地址叫做URL(統(tǒng)一資源定位符)
HTTP協(xié)議版本
HTTP/1.0發(fā)送請(qǐng)求,創(chuàng)建一次連接漆诽,獲得一個(gè)web資源侮攀,連接斷開(kāi)
HTTP/1.1 發(fā)送請(qǐng)求,創(chuàng)建一次連接厢拭,獲得多個(gè)web資源兰英,連接斷開(kāi)
HTTP協(xié)議的組成
HTTP協(xié)議由http請(qǐng)求和http響應(yīng)組成
請(qǐng)求包括:請(qǐng)求行,請(qǐng)求頭供鸠,請(qǐng)求體
響應(yīng)包括:響應(yīng)行畦贸,響應(yīng)頭,響應(yīng)體
請(qǐng)求行:POST/chapter17/user.html HTTP/1.1
格式:請(qǐng)求方式 資源路徑 協(xié)議/版本
請(qǐng)求行必須在http請(qǐng)求格式的第一行
get請(qǐng)求:將請(qǐng)求參數(shù)追加在url后面楞捂,不安全薄坏,url長(zhǎng)度限制了get請(qǐng)求方式數(shù)據(jù)的大小 沒(méi)有請(qǐng)求體,一般的HTTP請(qǐng)求都是GET
post請(qǐng)求:請(qǐng)求參數(shù)在請(qǐng)求體處寨闹,較安全胶坠,請(qǐng)求數(shù)據(jù)大小沒(méi)有顯示,只有表單設(shè)置為method="post"才是post請(qǐng)求繁堡,其他都是get請(qǐng)求
其他的請(qǐng)求方式還有:HEAD(類似get沈善,不過(guò)服務(wù)器只返回響應(yīng)頭)DELETE請(qǐng)求:刪除某一個(gè)資源 PUT請(qǐng)求:把資源放在指定位置
請(qǐng)求頭從第二行開(kāi)始,到第一個(gè)空格結(jié)束椭蹄,請(qǐng)求頭和請(qǐng)求體之間存在一個(gè)空格行 闻牡,請(qǐng)求頭通常以鍵值對(duì)方式傳遞數(shù)據(jù)
請(qǐng)求報(bào)文頭屬性:
referer:表示這個(gè)請(qǐng)求是從哪個(gè)url調(diào)過(guò)來(lái)的,通過(guò)百度籟搜索淘寶網(wǎng)绳矩,那么在進(jìn)入淘寶網(wǎng)的請(qǐng)求報(bào)文中罩润,referer的值就是:www.baidu.com 如果是直接訪問(wèn)就不會(huì)有這個(gè)頭 常用于防盜鏈
Accept:告訴服務(wù)端,該請(qǐng)求所能支持的響應(yīng)數(shù)據(jù)類型埋酬,專業(yè)術(shù)語(yǔ)成為MIME類型(文件類型的一種描述方式)Accept:text哨啃、html,application/xhtml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8?
MIME格式:大類型/小類型;參數(shù)
if-Modified-Sincce:瀏覽器通知服務(wù)器写妥,本地緩存的最后變更時(shí)間拳球。與另一個(gè)響應(yīng)頭組合控制瀏覽器頁(yè)面的緩存
Cokkie:客戶端的Cookie就是通過(guò)這個(gè)報(bào)文頭屬性傳給服務(wù)端的? 這里就有一個(gè)問(wèn)題 網(wǎng)站A怎么保證自己請(qǐng)求體中保存的cookie就是網(wǎng)站A而不是其他網(wǎng)站的,這就和cookie里面的jsessionid有關(guān)系詳情參考http://www.cnblogs.com/fnng/archive/2012/08/14/2637279.html
User-Agent:瀏覽器通知服務(wù)器珍特,客戶端瀏覽器與操作系統(tǒng)相關(guān)信息
Connection:表示客戶端與服務(wù)連接類型祝峻;Keep-Alive表示持久連接,close已關(guān)閉
Host:請(qǐng)求的服務(wù)器主機(jī)名
Content-Length:請(qǐng)求體的長(zhǎng)度
Content-Type:請(qǐng)求的與實(shí)體對(duì)應(yīng)的MIME信息,如果是post請(qǐng)求莱找,會(huì)有這個(gè)頭酬姆,默認(rèn)值為application/x-www-form-urlencoded,表示請(qǐng)求體內(nèi)容使用url編碼
Accept-Encoding:瀏覽器通知服務(wù)器奥溺,瀏覽器支持的數(shù)據(jù)壓縮格式辞色,如gzip壓縮
Accept-language:瀏覽器通知服務(wù)器,瀏覽器支持的語(yǔ)言浮定,各國(guó)語(yǔ)言
Cache-Control:指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制相满,對(duì)緩存進(jìn)行控制,如一個(gè)請(qǐng)求希望響應(yīng)返回的內(nèi)容在客戶端要被緩存一年桦卒,或不希望被緩存就可以通過(guò)這個(gè)報(bào)文打到目的
請(qǐng)求體:
當(dāng)請(qǐng)求方式是post時(shí)立美,請(qǐng)求體會(huì)有請(qǐng)求的參數(shù),格式如下username=zhangsan&password=123
HTTP響應(yīng)報(bào)文
HTTP的響應(yīng)報(bào)文也由三部分組成(響應(yīng)行+響應(yīng)頭+響應(yīng)體)
響應(yīng)行:1 報(bào)文協(xié)議及版本方灾;2 狀態(tài)碼及狀態(tài)描述
狀態(tài)碼由三位數(shù)字組成建蹄,第一個(gè)定義了響應(yīng)的類別 1xx:指示信息,表示請(qǐng)求已接受裕偿,繼續(xù)處理
2xx:成功洞慎,表示請(qǐng)求已被成功接收,處理(200 ok:客戶端請(qǐng)求成功击费, 204 No Content:無(wú)內(nèi)容拢蛋,服務(wù)器成功處理,但未返回內(nèi)容蔫巩,一般用在指示客戶端向服務(wù)器發(fā)送信息谆棱,而服務(wù)器不用向客戶端返回什么信息的情況,不會(huì)刷新頁(yè)面圆仔, 206 Partial Content:服務(wù)器已經(jīng)完成了部分get請(qǐng)求(客戶端進(jìn)行了范圍請(qǐng)求)垃瞧。響應(yīng)報(bào)文中包含了Content-Range指定范圍的實(shí)體內(nèi)容
3xx :重定向 301:永久重定向,表示請(qǐng)求的資源已經(jīng)永久搬到了其他位置 302:臨時(shí)重定向坪郭,表示請(qǐng)求的資源零食搬到了其他位置 304:表示客戶端發(fā)送附帶條件的請(qǐng)求時(shí)(get辦法請(qǐng)求報(bào)文中的IF)條件不滿足个从,返回304時(shí),不包含任何響應(yīng)主體
4xx:客戶端錯(cuò)誤 400:客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤歪沃,服務(wù)器無(wú)法理解 401:請(qǐng)求未經(jīng)授權(quán)嗦锐,這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用 403:服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù) 404:請(qǐng)求資源不存子啊 比如沪曙,輸入了錯(cuò)誤的url 415:不支持的媒體類型
5xx:服務(wù)器端錯(cuò)誤奕污。服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求 500:服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤 503:服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常?
響應(yīng)報(bào)文頭液走,也是由多個(gè)屬性組成 服務(wù)器通過(guò)響應(yīng)頭籟控制瀏覽器的行為碳默,不同的頭瀏覽器操作不同
常見(jiàn)的響應(yīng)頭:
Content-Type:
multipart/form-data:常見(jiàn)的POST數(shù)據(jù)提交的方式贾陷,我們使用表單上傳文件時(shí),必須讓form的enctyped等于這個(gè)值
application/json 這個(gè)作為請(qǐng)求頭時(shí)用來(lái)告訴服務(wù)端消息主體是序列化后的JSON字符串嘱根,由于json規(guī)范的流行髓废,出了底版本ie之外的各大瀏覽器都原生支持JSON.stringify,服務(wù)端語(yǔ)言也都有處理json的函數(shù),使用JSON不會(huì)遇上什么麻煩该抒,JSON格式支持比鍵值對(duì)復(fù)雜得多的結(jié)構(gòu)化數(shù)據(jù)