(原話)談?wù)剬?duì)HTTP協(xié)議的理解:
超文本傳輸協(xié)議,應(yīng)用于OSI網(wǎng)絡(luò)模型中的應(yīng)用層捡硅,是用于服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議哮内。它有兩個(gè)比較需要注意的特點(diǎn)就是:無連接,當(dāng)服務(wù)器處理完客戶的請求壮韭,并受到客戶的應(yīng)答后北发,就斷開連接;還有就是無狀態(tài)喷屋,是指協(xié)議對(duì)事物處理沒有記憶能力琳拨,如果后續(xù)處理需要前面的信息,那么就需要重傳屯曹。
請求消息:request狱庇,由請求行,請求頭部恶耽,空行密任,請求數(shù)據(jù)組成。其中請求頭部包含說明服務(wù)器使用的附加信息偷俭,比如HOST(請求服務(wù)器的域名和端口號(hào))浪讳,還有客戶端能接受的內(nèi)容類型,語言社搅,內(nèi)容壓縮編碼類型驻债,字符集編碼等。
響應(yīng)消息:response形葬,由狀態(tài)嗎合呐,消息報(bào)頭,空行笙以,響應(yīng)正文淌实,消息報(bào)頭則和請求消息中的請求頭部相對(duì)應(yīng)。
get和post的區(qū)別:get刷新和回退是無害的,Post數(shù)據(jù)會(huì)被重新提交拆祈,因?yàn)間et能夠被緩存恨闪,而Post是不能被緩存的,然后get可以被存為書簽放坏,請求參數(shù)會(huì)顯示在URL中咙咽,并且會(huì)保留在瀏覽器歷史中,get對(duì)數(shù)據(jù)長度是有限制的淤年,Post是無限制的钧敞;最后get對(duì)數(shù)據(jù)類型的限制,只允許ASC||字符麸粮,Post還可以使用二進(jìn)制溉苛。
以下部分為轉(zhuǎn)載內(nèi)容:
一、HTTP簡介
·●http協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫弄诲,是用于從萬維網(wǎng)(world wide web)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議愚战。
·●http是基于TCP/IP通信協(xié)議來傳送數(shù)據(jù)(HTML文件、圖片文件齐遵、查詢結(jié)果等)
·●http是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議寂玲,由于其簡捷、快速的方式梗摇,適用于分布式超媒體信息系統(tǒng)敢茁。
·●HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請求留美。Web服務(wù)器根據(jù)接收到的請求后彰檬,向客戶端發(fā)送響應(yīng)信息。
主要特點(diǎn):
1谎砾、簡單快速:客戶向服務(wù)器請求服務(wù)時(shí)逢倍,只需傳送請求方法和路徑。請求方法常用的有g(shù)et景图、head较雕、post.每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于http協(xié)議簡單挚币,使得http服務(wù)器的程序規(guī)模小亮蒋,因而通信速度很快。
2妆毕、靈活:http允許傳輸任意類型的數(shù)據(jù)對(duì)象慎玖。正在傳輸?shù)念愋陀蒫ontent-type加以標(biāo)記。
3笛粘、無連接:無連接的含義是限制每次連接只處理一個(gè)請求趁怔。服務(wù)器處理完客戶的請求湿硝,并受到客戶的應(yīng)答后,即斷開連接润努。采用這種方式可以節(jié)省傳輸時(shí)間关斜。
4、無狀態(tài):http協(xié)議是無狀態(tài)協(xié)議铺浇。無狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力痢畜。缺少狀態(tài)意味著如果后續(xù)處理需要前面的額信息,則它必須重傳鳍侣,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大裁着。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快拱她。
5、支持B/S及C/S模式
二扔罪、HTTP之URL:
http使用統(tǒng)一資源標(biāo)識(shí)符(Uniform resource Identitifers,URL)來傳輸數(shù)據(jù)和建立連接秉沼。Url是一種特殊類型的URI,包含了用于查找某個(gè)資源的足夠信息矿酵。
URL,全稱是UniformResourceLocator, 中文叫統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上用來標(biāo)識(shí)某一處資源的地址唬复。以下面這個(gè)URL為例,介紹下普通URL的各部分組成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的
URL可以看出全肮,一個(gè)完整的URL包括以下幾部分:
1.協(xié)議部分:該URL的協(xié)議部分為“http:”敞咧,這代表網(wǎng)頁使用的是http協(xié)議。在Internet中可以使用多種協(xié)議辜腺,如http休建,F(xiàn)TP等等。在“http:”后面跟著的是分隔符“//”
2.域名部分:該URL的域名部分為www.aspxfans.com评疗,一個(gè)URL中测砂,也可以使用IP地址作為域名使用。
3.端口部分:根在域名后面的是端口百匆,域名和端口之間使用“:”作為分隔符砌些。端口不是一個(gè)URL必須的部分,如果省略端口部分加匈,將采用默認(rèn)端口存璃。
4.虛擬目錄部分:從域名后的第一個(gè)“/”開始到最后一個(gè)“/”為止,是虛擬目錄部分雕拼。虛擬目錄也不是一個(gè)URL必須的部分纵东。本例中的虛擬目錄是“/news/”
5.文件名部分:從域名后的最后一個(gè)“/”開始到“?”為止啥寇,是文件名部分篮迎,如果沒有“男图?”則是從域名的最后一個(gè)“/”開始到“#”為止,是文件部分甜橱,如果沒有“逊笆?”和“#”,那么從域名后的最后一個(gè)“/”開始到結(jié)束岂傲,都是文件名部分难裆。本例中的文件名是“index.asp”。文件名部分也不是一個(gè)URL必須的部分镊掖,如果省略該部分乃戈,則使用默認(rèn)的文件名
6.錨部分:從“#”開始到最后,都是錨部分亩进。本例中的錨部分是“name”症虑。錨部分也不是一個(gè)URL必須的部分
7.參數(shù)部分:從“?”開始到“#”為止之間的部分為參數(shù)部分归薛,又稱搜索部分谍憔、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”主籍。參數(shù)可以允許有多個(gè)參數(shù)习贫,參數(shù)與參數(shù)之間用“&”作為分隔符。
三千元、URI和URL的區(qū)別:
URI苫昌,是Uniform resource identifier,統(tǒng)一資源標(biāo)識(shí)符,用來唯一地標(biāo)志一個(gè)資源幸海。
Web上可用的每種資源如HTML文檔祟身,圖像、視頻片段物独、程序等都是用一個(gè)URI來定位的
URI一般由但部分組成:
A.訪問資源的命名機(jī)制
B.存放資源的主機(jī)名
C.資源自身的名稱月而,由路徑表示,著重強(qiáng)調(diào)于資源议纯。
URL是uniform resource locator 父款,統(tǒng)一資源定位器,它是一種具體的URI瞻凤,即URL可以用來標(biāo)志一個(gè)資源憨攒,而且還指明了如何locate定位這個(gè)資源
URL是Internet上用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務(wù)器程序上阀参,特別是著名的MOSAIC
采用URL可以用一種統(tǒng)一的格式來描述各種信息資源肝集,包括文件、服務(wù)器的地址和目錄等蛛壳。URL一般由三部分組成:
A.協(xié)議(或者稱為服務(wù)方式)
B.存有該資源的主機(jī)IP地址(有時(shí)也包括端口)
C.主機(jī)資源的具體地址杏瞻。如目錄和文件名等所刀。
URN,uniform resource name捞挥,統(tǒng)一資源命名浮创,是通過名字來標(biāo)識(shí)資源,比如mailto:java-net@java.sun.com砌函。
URI是以一種抽象的斩披,高層次概念定義統(tǒng)一資源標(biāo)識(shí),而URL和URN則是具體的資源標(biāo)識(shí)的方式讹俊。URL和URN都是一種URI垦沉。籠統(tǒng)地說仍劈,每個(gè) URL 都是 URI厕倍,但不一定每個(gè) URI 都是 URL。這是因?yàn)?URI 還包括一個(gè)子類贩疙,即統(tǒng)一資源名稱 (URN)讹弯,它命名資源但不指定如何定位資源。上面的 mailto屋群、news 和 isbn URI 都是 URN 的示例。
在Java的URI中坏挠,一個(gè)URI實(shí)例可以代表絕對(duì)的芍躏,也可以是相對(duì)的,只要它符合URI的語法規(guī)則降狠。而URL類則不僅符合語義对竣,還包含了定位該資源的信息,因此它不能是相對(duì)的榜配。
在Java類庫中否纬,URI類不包含任何訪問資源的方法,它唯一的作用就是解析蛋褥。
相反的是临燃,URL類可以打開一個(gè)到達(dá)資源的流
四、HTTP之請求消息request
客戶端發(fā)送一個(gè)http請求到服務(wù)器的請求消息包括以下格式:
請求行(request line)烙心、請求頭部(header)膜廊、空行和請求數(shù)據(jù)四個(gè)部分組成
·請求行以一個(gè)方法符號(hào)開頭,以空格分開淫茵,后面跟著請求的URI和協(xié)議的版本爪瓜。
Get請求例子,使用charles 抓取的request:
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.
第一部分:請求行匙瘪,用來說明請求類型铆铆,要訪問的資源以及所使用的http版本蝶缀。
get說明請求類型為GET,[/562f25980001b1b106000338.jpg]為要訪問的資源薄货,該行的 最后一部分說明使用的是HTTP1.1版本翁都。
第二部分:請求頭部,緊接著請求行之后的部分菲驴,用來說明服務(wù)器要使用的附加信息
從第二行起為請求頭部荐吵,HOST將指出請求的目的地,User-Agent服務(wù)器端和客戶端腳 本都能訪問它赊瞬,它是瀏覽器類型檢測邏輯的重要基礎(chǔ)先煎,該信息由你的瀏覽器來定義,并 且在每個(gè)請求中自動(dòng)發(fā)送等等
第三部分:空行巧涧,請求頭部后面空行是必須的
即使第四部分的請求數(shù)據(jù)為空薯蝎,也必須有空行。
第四部分:請求數(shù)據(jù)也叫主體谤绳,可以添加任意的其他數(shù)據(jù)占锯。
這個(gè)例子的請求數(shù)據(jù)為空。
Post請求例子缩筛,request:
POST / HTTP1.1 Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
五消略、HTTP之響應(yīng)信息reponse
一般情況下,服務(wù)器接收并處理客戶端發(fā)過來的請求后會(huì)返回一個(gè)HTTP的響應(yīng)信息瞎抛。
HTTP響應(yīng)也由四個(gè)部分組成艺演,分別為:狀態(tài)行、消息報(bào)頭桐臊、空行胎撤、響應(yīng)正文
(原話)談?wù)剬?duì)HTTP協(xié)議的理解:
超文本傳輸協(xié)議,應(yīng)用于OSI網(wǎng)絡(luò)模型中的應(yīng)用層断凶,是用于服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議伤提。它有兩個(gè)比較需要注意的特點(diǎn)就是:無連接,當(dāng)服務(wù)器處理完客戶的請求认烁,并受到客戶的應(yīng)答后肿男,就斷開連接;還有就是無狀態(tài)却嗡,是指協(xié)議對(duì)事物處理沒有記憶能力次伶,如果后續(xù)處理需要前面的信息,那么就需要重傳稽穆。
請求消息:request冠王,由請求行,請求頭部舌镶,空行柱彻,請求數(shù)據(jù)組成豪娜。其中請求頭部包含說明服務(wù)器使用的附加信息,比如HOST(請求服務(wù)器的域名和端口號(hào))哟楷,還有客戶端能接受的內(nèi)容類型瘤载,語言,內(nèi)容壓縮編碼類型卖擅,字符集編碼等鸣奔。
響應(yīng)消息:response,由狀態(tài)嗎惩阶,消息報(bào)頭挎狸,空行,響應(yīng)正文断楷,消息報(bào)頭則和請求消息中的請求頭部相對(duì)應(yīng)锨匆。
get和post的區(qū)別:get刷新和回退是無害的,Post數(shù)據(jù)會(huì)被重新提交冬筒,因?yàn)間et能夠被緩存恐锣,而Post是不能被緩存的,然后get可以被存為書簽舞痰,請求參數(shù)會(huì)顯示在URL中土榴,并且會(huì)保留在瀏覽器歷史中,get對(duì)數(shù)據(jù)長度是有限制的响牛,Post是無限制的玷禽;最后get對(duì)數(shù)據(jù)類型的限制,只允許ASC||字符娃善,Post還可以使用二進(jìn)制论衍。
以下部分為轉(zhuǎn)載內(nèi)容:
一瑞佩、HTTP簡介
·●http協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫聚磺,是用于從萬維網(wǎng)(world wide web)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。
·●http是基于TCP/IP通信協(xié)議來傳送數(shù)據(jù)(HTML文件炬丸、圖片文件瘫寝、查詢結(jié)果等)
·●http是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷稠炬、快速的方式焕阿,適用于分布式超媒體信息系統(tǒng)。
·●HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上首启。瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請求暮屡。Web服務(wù)器根據(jù)接收到的請求后,向客戶端發(fā)送響應(yīng)信息毅桃。
主要特點(diǎn):
1褒纲、簡單快速:客戶向服務(wù)器請求服務(wù)時(shí)准夷,只需傳送請求方法和路徑。請求方法常用的有g(shù)et莺掠、head衫嵌、post.每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于http協(xié)議簡單彻秆,使得http服務(wù)器的程序規(guī)模小楔绞,因而通信速度很快。
2唇兑、靈活:http允許傳輸任意類型的數(shù)據(jù)對(duì)象酒朵。正在傳輸?shù)念愋陀蒫ontent-type加以標(biāo)記。
3幔亥、無連接:無連接的含義是限制每次連接只處理一個(gè)請求耻讽。服務(wù)器處理完客戶的請求,并受到客戶的應(yīng)答后帕棉,即斷開連接针肥。采用這種方式可以節(jié)省傳輸時(shí)間。
4香伴、無狀態(tài):http協(xié)議是無狀態(tài)協(xié)議慰枕。無狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的額信息即纲,則它必須重傳具帮,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面低斋,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快蜂厅。
5、支持B/S及C/S模式
二膊畴、HTTP之URL:
http使用統(tǒng)一資源標(biāo)識(shí)符(Uniform resource Identitifers,URL)來傳輸數(shù)據(jù)和建立連接掘猿。Url是一種特殊類型的URI,包含了用于查找某個(gè)資源的足夠信息唇跨。
URL,全稱是UniformResourceLocator, 中文叫統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上用來標(biāo)識(shí)某一處資源的地址稠通。以下面這個(gè)URL為例,介紹下普通URL的各部分組成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的
URL可以看出买猖,一個(gè)完整的URL包括以下幾部分:
1.協(xié)議部分:該URL的協(xié)議部分為“http:”改橘,這代表網(wǎng)頁使用的是http協(xié)議。在Internet中可以使用多種協(xié)議玉控,如http飞主,F(xiàn)TP等等。在“http:”后面跟著的是分隔符“//”
2.域名部分:該URL的域名部分為www.aspxfans.com,一個(gè)URL中碌识,也可以使用IP地址作為域名使用讽挟。
3.端口部分:根在域名后面的是端口,域名和端口之間使用“:”作為分隔符丸冕。端口不是一個(gè)URL必須的部分耽梅,如果省略端口部分,將采用默認(rèn)端口胖烛。
4.虛擬目錄部分:從域名后的第一個(gè)“/”開始到最后一個(gè)“/”為止眼姐,是虛擬目錄部分。虛擬目錄也不是一個(gè)URL必須的部分佩番。本例中的虛擬目錄是“/news/”
5.文件名部分:從域名后的最后一個(gè)“/”開始到“众旗?”為止,是文件名部分趟畏,如果沒有“贡歧?”則是從域名的最后一個(gè)“/”開始到“#”為止,是文件部分赋秀,如果沒有“利朵?”和“#”,那么從域名后的最后一個(gè)“/”開始到結(jié)束猎莲,都是文件名部分绍弟。本例中的文件名是“index.asp”。文件名部分也不是一個(gè)URL必須的部分著洼,如果省略該部分樟遣,則使用默認(rèn)的文件名
6.錨部分:從“#”開始到最后,都是錨部分身笤。本例中的錨部分是“name”豹悬。錨部分也不是一個(gè)URL必須的部分
7.參數(shù)部分:從“?”開始到“#”為止之間的部分為參數(shù)部分液荸,又稱搜索部分瞻佛、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”莹弊。參數(shù)可以允許有多個(gè)參數(shù)涤久,參數(shù)與參數(shù)之間用“&”作為分隔符涡尘。
三忍弛、URI和URL的區(qū)別:
URI,是Uniform resource identifier,統(tǒng)一資源標(biāo)識(shí)符考抄,用來唯一地標(biāo)志一個(gè)資源细疚。
Web上可用的每種資源如HTML文檔,圖像川梅、視頻片段疯兼、程序等都是用一個(gè)URI來定位的
URI一般由但部分組成:
A.訪問資源的命名機(jī)制
B.存放資源的主機(jī)名
C.資源自身的名稱然遏,由路徑表示,著重強(qiáng)調(diào)于資源吧彪。
URL是uniform resource locator 待侵,統(tǒng)一資源定位器,它是一種具體的URI姨裸,即URL可以用來標(biāo)志一個(gè)資源秧倾,而且還指明了如何locate定位這個(gè)資源
URL是Internet上用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務(wù)器程序上傀缩,特別是著名的MOSAIC
采用URL可以用一種統(tǒng)一的格式來描述各種信息資源那先,包括文件、服務(wù)器的地址和目錄等赡艰。URL一般由三部分組成:
A.協(xié)議(或者稱為服務(wù)方式)
B.存有該資源的主機(jī)IP地址(有時(shí)也包括端口)
C.主機(jī)資源的具體地址售淡。如目錄和文件名等。
URN慷垮,uniform resource name揖闸,統(tǒng)一資源命名,是通過名字來標(biāo)識(shí)資源料身,比如mailto:java-net@java.sun.com楔壤。
URI是以一種抽象的,高層次概念定義統(tǒng)一資源標(biāo)識(shí)惯驼,而URL和URN則是具體的資源標(biāo)識(shí)的方式蹲嚣。URL和URN都是一種URI∷钌籠統(tǒng)地說隙畜,每個(gè) URL 都是 URI,但不一定每個(gè) URI 都是 URL说贝。這是因?yàn)?URI 還包括一個(gè)子類议惰,即統(tǒng)一資源名稱 (URN),它命名資源但不指定如何定位資源乡恕。上面的 mailto言询、news 和 isbn URI 都是 URN 的示例。
在Java的URI中傲宜,一個(gè)URI實(shí)例可以代表絕對(duì)的运杭,也可以是相對(duì)的,只要它符合URI的語法規(guī)則函卒。而URL類則不僅符合語義辆憔,還包含了定位該資源的信息,因此它不能是相對(duì)的。
在Java類庫中虱咧,URI類不包含任何訪問資源的方法熊榛,它唯一的作用就是解析。
相反的是腕巡,URL類可以打開一個(gè)到達(dá)資源的流
四玄坦、HTTP之請求消息request
客戶端發(fā)送一個(gè)http請求到服務(wù)器的請求消息包括以下格式:
請求行(request line)、請求頭部(header)绘沉、空行和請求數(shù)據(jù)四個(gè)部分組成
·請求行以一個(gè)方法符號(hào)開頭营搅,以空格分開,后面跟著請求的URI和協(xié)議的版本梆砸。
Get請求例子转质,使用charles 抓取的request:
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.
第一部分:請求行,用來說明請求類型帖世,要訪問的資源以及所使用的http版本休蟹。
get說明請求類型為GET,[/562f25980001b1b106000338.jpg]為要訪問的資源日矫,該行的 最后一部分說明使用的是HTTP1.1版本赂弓。
第二部分:請求頭部,緊接著請求行之后的部分哪轿,用來說明服務(wù)器要使用的附加信息
從第二行起為請求頭部盈魁,HOST將指出請求的目的地,User-Agent服務(wù)器端和客戶端腳 本都能訪問它窃诉,它是瀏覽器類型檢測邏輯的重要基礎(chǔ)杨耙,該信息由你的瀏覽器來定義,并 且在每個(gè)請求中自動(dòng)發(fā)送等等
第三部分:空行飘痛,請求頭部后面空行是必須的
即使第四部分的請求數(shù)據(jù)為空珊膜,也必須有空行。
第四部分:請求數(shù)據(jù)也叫主體宣脉,可以添加任意的其他數(shù)據(jù)车柠。
這個(gè)例子的請求數(shù)據(jù)為空。
Post請求例子塑猖,request:
POST / HTTP1.1 Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
五竹祷、HTTP之響應(yīng)信息reponse
一般情況下,服務(wù)器接收并處理客戶端發(fā)過來的請求后會(huì)返回一個(gè)HTTP的響應(yīng)信息羊苟。
HTTP響應(yīng)也由四個(gè)部分組成塑陵,分別為:狀態(tài)行、消息報(bào)頭践险、空行猿妈、響應(yīng)正文
![(原話)談?wù)剬?duì)HTTP協(xié)議的理解:
超文本傳輸協(xié)議,應(yīng)用于OSI網(wǎng)絡(luò)模型中的應(yīng)用層巍虫,是用于服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議彭则。它有兩個(gè)比較需要注意的特點(diǎn)就是:無連接,當(dāng)服務(wù)器處理完客戶的請求占遥,并受到客戶的應(yīng)答后俯抖,就斷開連接;還有就是無狀態(tài)瓦胎,是指協(xié)議對(duì)事物處理沒有記憶能力芬萍,如果后續(xù)處理需要前面的信息,那么就需要重傳搔啊。
請求消息:request柬祠,由請求行,請求頭部负芋,空行漫蛔,請求數(shù)據(jù)組成。其中請求頭部包含說明服務(wù)器使用的附加信息旧蛾,比如HOST(請求服務(wù)器的域名和端口號(hào))莽龟,還有客戶端能接受的內(nèi)容類型,語言锨天,內(nèi)容壓縮編碼類型毯盈,字符集編碼等。
響應(yīng)消息:response病袄,由狀態(tài)嗎搂赋,消息報(bào)頭,空行益缠,響應(yīng)正文厂镇,消息報(bào)頭則和請求消息中的請求頭部相對(duì)應(yīng)。
get和post的區(qū)別:get刷新和回退是無害的左刽,Post數(shù)據(jù)會(huì)被重新提交捺信,因?yàn)間et能夠被緩存,而Post是不能被緩存的欠痴,然后get可以被存為書簽迄靠,請求參數(shù)會(huì)顯示在URL中,并且會(huì)保留在瀏覽器歷史中喇辽,get對(duì)數(shù)據(jù)長度是有限制的掌挚,Post是無限制的;最后get對(duì)數(shù)據(jù)類型的限制菩咨,只允許ASC||字符吠式,Post還可以使用二進(jìn)制陡厘。
以下部分為轉(zhuǎn)載內(nèi)容:
一、HTTP簡介
·●http協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫特占,是用于從萬維網(wǎng)(world wide web)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議糙置。
·●http是基于TCP/IP通信協(xié)議來傳送數(shù)據(jù)(HTML文件、圖片文件是目、查詢結(jié)果等)
·●http是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議谤饭,由于其簡捷、快速的方式懊纳,適用于分布式超媒體信息系統(tǒng)揉抵。
·●HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請求嗤疯。Web服務(wù)器根據(jù)接收到的請求后冤今,向客戶端發(fā)送響應(yīng)信息。
主要特點(diǎn):
1茂缚、簡單快速:客戶向服務(wù)器請求服務(wù)時(shí)辟汰,只需傳送請求方法和路徑。請求方法常用的有g(shù)et阱佛、head帖汞、post.每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于http協(xié)議簡單凑术,使得http服務(wù)器的程序規(guī)模小翩蘸,因而通信速度很快。
2淮逊、靈活:http允許傳輸任意類型的數(shù)據(jù)對(duì)象催首。正在傳輸?shù)念愋陀蒫ontent-type加以標(biāo)記。
3泄鹏、無連接:無連接的含義是限制每次連接只處理一個(gè)請求郎任。服務(wù)器處理完客戶的請求,并受到客戶的應(yīng)答后备籽,即斷開連接舶治。采用這種方式可以節(jié)省傳輸時(shí)間。
4车猬、無狀態(tài):http協(xié)議是無狀態(tài)協(xié)議霉猛。無狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的額信息珠闰,則它必須重傳惜浅,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面伏嗜,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快坛悉。
5伐厌、支持B/S及C/S模式
二廓八、HTTP之URL:
http使用統(tǒng)一資源標(biāo)識(shí)符(Uniform resource Identitifers,URL)來傳輸數(shù)據(jù)和建立連接迁匠。Url是一種特殊類型的URI垫挨,包含了用于查找某個(gè)資源的足夠信息社牲。
URL,全稱是UniformResourceLocator, 中文叫統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上用來標(biāo)識(shí)某一處資源的地址。以下面這個(gè)URL為例狡耻,介紹下普通URL的各部分組成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的
URL可以看出,一個(gè)完整的URL包括以下幾部分:
1.協(xié)議部分:該URL的協(xié)議部分為“http:”,這代表網(wǎng)頁使用的是http協(xié)議界轩。在Internet中可以使用多種協(xié)議,如http衔瓮,F(xiàn)TP等等浊猾。在“http:”后面跟著的是分隔符“//”
2.域名部分:該URL的域名部分為www.aspxfans.com,一個(gè)URL中热鞍,也可以使用IP地址作為域名使用葫慎。
3.端口部分:根在域名后面的是端口,域名和端口之間使用“:”作為分隔符薇宠。端口不是一個(gè)URL必須的部分偷办,如果省略端口部分,將采用默認(rèn)端口澄港。
4.虛擬目錄部分:從域名后的第一個(gè)“/”開始到最后一個(gè)“/”為止椒涯,是虛擬目錄部分。虛擬目錄也不是一個(gè)URL必須的部分回梧。本例中的虛擬目錄是“/news/”
5.文件名部分:從域名后的最后一個(gè)“/”開始到“废岂?”為止,是文件名部分狱意,如果沒有“湖苞?”則是從域名的最后一個(gè)“/”開始到“#”為止,是文件部分详囤,如果沒有“财骨?”和“#”,那么從域名后的最后一個(gè)“/”開始到結(jié)束藏姐,都是文件名部分蚓再。本例中的文件名是“index.asp”。文件名部分也不是一個(gè)URL必須的部分包各,如果省略該部分摘仅,則使用默認(rèn)的文件名
6.錨部分:從“#”開始到最后,都是錨部分问畅。本例中的錨部分是“name”娃属。錨部分也不是一個(gè)URL必須的部分
7.參數(shù)部分:從“六荒?”開始到“#”為止之間的部分為參數(shù)部分,又稱搜索部分矾端、查詢部分掏击。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”。參數(shù)可以允許有多個(gè)參數(shù)秩铆,參數(shù)與參數(shù)之間用“&”作為分隔符砚亭。
三、URI和URL的區(qū)別:
URI殴玛,是Uniform resource identifier,統(tǒng)一資源標(biāo)識(shí)符捅膘,用來唯一地標(biāo)志一個(gè)資源。
Web上可用的每種資源如HTML文檔滚粟,圖像寻仗、視頻片段、程序等都是用一個(gè)URI來定位的
URI一般由但部分組成:
A.訪問資源的命名機(jī)制
B.存放資源的主機(jī)名
C.資源自身的名稱凡壤,由路徑表示署尤,著重強(qiáng)調(diào)于資源。
URL是uniform resource locator 亚侠,統(tǒng)一資源定位器曹体,它是一種具體的URI,即URL可以用來標(biāo)志一個(gè)資源硝烂,而且還指明了如何locate定位這個(gè)資源
URL是Internet上用來描述信息資源的字符串箕别,主要用在各種WWW客戶程序和服務(wù)器程序上,特別是著名的MOSAIC
采用URL可以用一種統(tǒng)一的格式來描述各種信息資源钢坦,包括文件究孕、服務(wù)器的地址和目錄等。URL一般由三部分組成:
A.協(xié)議(或者稱為服務(wù)方式)
B.存有該資源的主機(jī)IP地址(有時(shí)也包括端口)
C.主機(jī)資源的具體地址爹凹。如目錄和文件名等厨诸。
URN,uniform resource name禾酱,統(tǒng)一資源命名微酬,是通過名字來標(biāo)識(shí)資源,比如mailto:java-net@java.sun.com颤陶。
URI是以一種抽象的颗管,高層次概念定義統(tǒng)一資源標(biāo)識(shí),而URL和URN則是具體的資源標(biāo)識(shí)的方式滓走。URL和URN都是一種URI垦江。籠統(tǒng)地說搅方,每個(gè) URL 都是 URI比吭,但不一定每個(gè) URI 都是 URL绽族。這是因?yàn)?URI 還包括一個(gè)子類,即統(tǒng)一資源名稱 (URN)衩藤,它命名資源但不指定如何定位資源吧慢。上面的 mailto、news 和 isbn URI 都是 URN 的示例赏表。
在Java的URI中检诗,一個(gè)URI實(shí)例可以代表絕對(duì)的,也可以是相對(duì)的瓢剿,只要它符合URI的語法規(guī)則逢慌。而URL類則不僅符合語義,還包含了定位該資源的信息跋选,因此它不能是相對(duì)的涕癣。
在Java類庫中哗蜈,URI類不包含任何訪問資源的方法前标,它唯一的作用就是解析。
相反的是距潘,URL類可以打開一個(gè)到達(dá)資源的流
四炼列、HTTP之請求消息request
客戶端發(fā)送一個(gè)http請求到服務(wù)器的請求消息包括以下格式:
請求行(request line)、請求頭部(header)音比、空行和請求數(shù)據(jù)四個(gè)部分組成
·請求行以一個(gè)方法符號(hào)開頭俭尖,以空格分開,后面跟著請求的URI和協(xié)議的版本洞翩。
Get請求例子稽犁,使用charles 抓取的request:
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.
第一部分:請求行,用來說明請求類型骚亿,要訪問的資源以及所使用的http版本已亥。
get說明請求類型為GET,[/562f25980001b1b106000338.jpg]為要訪問的資源来屠,該行的 最后一部分說明使用的是HTTP1.1版本虑椎。
第二部分:請求頭部,緊接著請求行之后的部分俱笛,用來說明服務(wù)器要使用的附加信息
從第二行起為請求頭部捆姜,HOST將指出請求的目的地,User-Agent服務(wù)器端和客戶端腳 本都能訪問它迎膜,它是瀏覽器類型檢測邏輯的重要基礎(chǔ)泥技,該信息由你的瀏覽器來定義,并 且在每個(gè)請求中自動(dòng)發(fā)送等等
第三部分:空行磕仅,請求頭部后面空行是必須的
即使第四部分的請求數(shù)據(jù)為空珊豹,也必須有空行镊讼。
第四部分:請求數(shù)據(jù)也叫主體,可以添加任意的其他數(shù)據(jù)平夜。
這個(gè)例子的請求數(shù)據(jù)為空蝶棋。
Post請求例子,request:
POST / HTTP1.1 Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
五忽妒、HTTP之響應(yīng)信息reponse
一般情況下玩裙,服務(wù)器接收并處理客戶端發(fā)過來的請求后會(huì)返回一個(gè)HTTP的響應(yīng)信息。
HTTP響應(yīng)也由四個(gè)部分組成段直,分別為:狀態(tài)行吃溅、消息報(bào)頭、空行鸯檬、響應(yīng)正文
![Uploading image_687775.png . . .]
](http://upload-images.jianshu.io/upload_images/8816796-a913046d377b7ae1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
第一部分:狀態(tài)行决侈,由http協(xié)議版本號(hào),狀態(tài)號(hào)喧务,狀態(tài)消息三部分組成赖歌。
第一行為狀態(tài)行,(http/1.1)表名http版本功茴,狀態(tài)碼為200庐冯,狀態(tài)消息為(OK)
第二部分:消息報(bào)頭,用來說明客戶端要使用的一些附加信息
二三行為消息報(bào)頭坎穿,
Date:生成響應(yīng)的日期和時(shí)間展父;content-type:指定了MIME類型的HTML(text/html), 編碼類型為UTF-8
第三部分:空行,消息報(bào)頭后面的空行必須要有玲昧。
第四部分:響應(yīng)正文栖茉,服務(wù)器返回給客戶端的文本信息。
空行后面的html部分為響應(yīng)正文孵延。
六吕漂、HTTP之狀態(tài)碼
狀態(tài)碼由三個(gè)數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類別隙袁,共分五種類別:
1xx:指示信息--表示請求已接受痰娱,繼續(xù)處理
2xx:成功--表示請求已被成功接收、理解菩收、接受
3xx:重定向--要完成請求必須進(jìn)行更進(jìn)一步的操作
4xx:客戶端錯(cuò)誤--請求有語法錯(cuò)誤或請求無法實(shí)現(xiàn)
5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請求
一些常見的狀態(tài)碼:
···
200 OK //客戶端請求成功
400 bad request //客戶端請求有語法錯(cuò)誤梨睁,不能被服務(wù)器所理解
401 unauthorized //請求要求用戶的省份認(rèn)證
403 forbidden //服務(wù)器理解請求客戶端的請求,但是拒絕執(zhí)行此請求
404 not found //請求資源不存在
500 internal server error//服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 server unavailable //服務(wù)器當(dāng)前不能處理客戶端的請求娜饵,一段時(shí)間后可能恢復(fù)正常
···