HTTP简介
HTTP簡(jiǎn)介
1.HTTP概述
HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬維網(wǎng)(WWW:World Wide Web )服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。它是一種請(qǐng)求/響應(yīng)式的協(xié)議,客戶端在于服務(wù)器建立連接后,就可以向服務(wù)器端發(fā)送URL請(qǐng)求,這種請(qǐng)求被稱為HTTP請(qǐng)求,服務(wù)器端在接收到請(qǐng)求之后會(huì)做出響應(yīng),稱為HTTP響應(yīng)。
HTTP是一個(gè)基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)(HTML 文件, 圖片文件, 查詢結(jié)果等)。
客戶端與服務(wù)器端在HTTP下的交互過程如下圖所示:
HTTP協(xié)議的特點(diǎn):
(1)支持客戶端(瀏覽器就是一直web客戶端)/服務(wù)器端模式。
(2)簡(jiǎn)單快速:客戶端向服務(wù)器端發(fā)送請(qǐng)求服務(wù)時(shí),只需要傳送請(qǐng)求方式和路徑。常用的請(qǐng)求方式有GRT和POST等,每種方式規(guī)定了客戶端與服務(wù)器聯(lián)系的類型不同。由于HTTP比較簡(jiǎn)單,使得HTTP服務(wù)器的程序規(guī)模較小,因而通信速度很快。
(3)靈活:HTTP允許傳輸任意類型的數(shù)據(jù),正在傳輸?shù)臄?shù)據(jù)類型由Content-Type加以標(biāo)記。
(4)無狀態(tài):HTTP是無狀態(tài)協(xié)議。無狀態(tài)是值協(xié)議對(duì)于事物處理沒有記憶能力,如果后續(xù)處理需要前面的信息,則HTTP必須重傳,這可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。
(5)支持B/S及C/S模式。
2.URL地址
在Internet上的web服務(wù)器中,每一個(gè)網(wǎng)頁文件都會(huì)用一個(gè)用于唯一標(biāo)識(shí)其他位置的訪問標(biāo)記符。這個(gè)訪問標(biāo)記符被稱為URL(Uniform Resource Locator,統(tǒng)一資源定位符)。
在一個(gè)URL中,通常包含Web服務(wù)器的主機(jī)名、端口號(hào)、資源名以及所使用的網(wǎng)絡(luò)協(xié)議。例如:
http://www.itheima.com:80/idex.htmlhttp:表示傳輸數(shù)據(jù)所使用的協(xié)議
www.itheima.com:表示請(qǐng)求的服務(wù)主機(jī)名
80:表示請(qǐng)求的端口號(hào)
index.html:表示要請(qǐng)求的資源名稱 ?
例: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,FTP等等本例中使用的是HTTP協(xié)議。在"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ù)之間用“&”作為分隔符。
(原文:http://blog.csdn.net/ergouge/article/details/8185219?)
URI和URL的區(qū)別
(原文:http://www.cnblogs.com/ranyonsue/p/5984001.html)
URI,是uniform resource identifier,統(tǒng)一資源標(biāo)識(shí)符,用來唯一的標(biāo)識(shí)一個(gè)資源。
Web上可用的每種資源如HTML文檔、圖像、視頻片段、程序等都是一個(gè)來URI來定位的
URI一般由三部組成:
①訪問資源的命名機(jī)制
②存放資源的主機(jī)名
③資源自身的名稱,由路徑表示,著重強(qiáng)調(diào)于資源。
URL是uniform resource locator,統(tǒng)一資源定位器,它是一種具體的URI,即URL可以用來標(biāo)識(shí)一個(gè)資源,而且還指明了如何locate這個(gè)資源。
URL是Internet上用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務(wù)器程序上,特別是著名的Mosaic。
采用URL可以用一種統(tǒng)一的格式來描述各種信息資源,包括文件、服務(wù)器的地址和目錄等。URL一般由三部組成:
①協(xié)議(或稱為服務(wù)方式)
②存有該資源的主機(jī)IP地址(有時(shí)也包括端口號(hào))
③主機(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á)資源的流。
3.HTTP請(qǐng)求消息
在HTTP中,一個(gè)完整的請(qǐng)求消息由請(qǐng)求行、請(qǐng)求頭、空行和實(shí)體內(nèi)容組成。
(1)HTTP請(qǐng)求行
GET /day08_02/1.html HTTP/1.1GET:請(qǐng)求方式
day08_02/1.html:請(qǐng)求資源路徑
HTTP/1.1:通信使用的協(xié)議版本注意:請(qǐng)求行中的每個(gè)部分都需要用空格分割,最后要以回車換行結(jié)束 請(qǐng)求方式:Get(默認(rèn))? POST? DELETE? HEAD? OPTIONS TRACE? PUT和CONNECT八種。
(1)GET:請(qǐng)求獲取行的URI所標(biāo)示的資源;明文傳輸 不安全,數(shù)據(jù)量有限,不超過1kb
? ? ? ?GET是最常見的一種請(qǐng)求方式,當(dāng)客戶端要從服務(wù)器中讀取文檔時(shí),當(dāng)點(diǎn)擊網(wǎng)頁上的鏈接或者通過在瀏覽器的地址欄輸入網(wǎng)址來瀏覽網(wǎng)頁的,使用的都是GET方式。GET方法要求服務(wù)器將URL定位的資源放在響應(yīng)報(bào)文的數(shù)據(jù)部分,回送給客戶端。使用GET方法時(shí),請(qǐng)求參數(shù)和對(duì)應(yīng)的值附加在URL后面,利用一個(gè)問號(hào)(“?”)代表URL的結(jié)尾與請(qǐng)求參數(shù)的開始,傳遞參數(shù)長度受限制。例如,/index.jsp?id=100&op=bind,這樣通過GET方式傳遞的數(shù)據(jù)直接表示在地址中,所以我們可以把請(qǐng)求結(jié)果以鏈接的形式發(fā)送給好友。以用google搜索domety為例,Request格式如下:
?(原文:https://www.cnblogs.com/lauhp/p/8979393.html)
//請(qǐng)求行
1 GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1
//請(qǐng)求頭信息,因?yàn)镚ET請(qǐng)求沒有正文 2 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 3 application/msword, application/x-silverlight, application/x-shockwave-flash, */* 4 Referer: <a href="http://www.google.cn/">http://www.google.cn/</a> 5 Accept-Language: zh-cn 6 Accept-Encoding: gzip, deflate 7 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) 8 Host: <a href="http://www.google.cn">www.google.cn</a> 9 Connection: Keep-Alive 10 Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 11 NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y- 12 FxlRugatx63JLv7CWMD6UB_O_r
//空行
//因?yàn)镚ET沒有正文,所以下面為空(實(shí)體內(nèi)容)
可以看到,GET方式的請(qǐng)求一般不包含”請(qǐng)求內(nèi)容”部分,請(qǐng)求數(shù)據(jù)以地址的形式表現(xiàn)在請(qǐng)求行。地址鏈接如下:
<a href="http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq=">http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq=</a> 地址中”?”之后的部分就是通過GET發(fā)送的請(qǐng)求數(shù)據(jù),我們可以在地址欄中清楚的看到,各個(gè)數(shù)據(jù)之間用”&”符號(hào)隔開。顯然,這種方式不適合傳送私密數(shù)據(jù)。另外,由于不同的瀏覽器對(duì)地址的字符限制也有所不同,一般最多只能識(shí)別1024個(gè)字符,所以如果需要傳送大量數(shù)據(jù)的時(shí)候,也不適合使用GET方式。
?
(2)POST:?向指定資源提交數(shù)據(jù),請(qǐng)求服務(wù)器進(jìn)行處理(如提交表單或上傳文件);暗文傳輸,安全。數(shù)據(jù)量沒有限制。
? ? ? POST方法將請(qǐng)求參數(shù)封裝在HTTP請(qǐng)求數(shù)據(jù)中,以名稱/值的形式出現(xiàn),可以傳輸大量數(shù)據(jù),這樣POST方式對(duì)傳送的數(shù)據(jù)大小沒有限制,而且也不會(huì)顯示在URL中。還以上面的搜索domety為例,如果使用POST方式的話,格式如下:
?
//請(qǐng)求首行
1 POST /search HTTP/1.1
//請(qǐng)求頭信息 2 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 3 application/msword, application/x-silverlight, application/x-shockwave-flash, */* 4 Referer: <a href="http://www.google.cn/">http://www.google.cn/</a> 5 Accept-Language: zh-cn 6 Accept-Encoding: gzip, deflate 7 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) 8 Host: <a href="http://www.google.cn">www.google.cn</a> 9 Connection: Keep-Alive 10 Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 11 NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y- 12 FxlRugatx63JLv7CWMD6UB_O_r 13 //?這里是空行
//POST有請(qǐng)求正文
14 hl=zh-CN&source=hp&q=domety
? ? ?以看到,POST方式請(qǐng)求行中不包含數(shù)據(jù)字符串,這些數(shù)據(jù)保存在”請(qǐng)求內(nèi)容”部分,各數(shù)據(jù)之間也是使用”&”符號(hào)隔開。POST方式大多用于頁面的表單中。因?yàn)镻OST也能完成GET的功能,因此多數(shù)人在設(shè)計(jì)表單的時(shí)候一律都使用POST方式,其實(shí)這是一個(gè)誤區(qū)。GET方式也有自己的特點(diǎn)和優(yōu)勢(shì),我們應(yīng)該根據(jù)不同的情況來選擇是使用GET還是使用POST。
?
? ? ? 在實(shí)際開發(fā)中,通常都會(huì)使用POST方法發(fā)送請(qǐng)求,其原因:
第一:POST傳輸?shù)臄?shù)據(jù)大小無限制。由于GET請(qǐng)求方式是通過請(qǐng)求參數(shù)傳遞數(shù)據(jù)的,因此最多可傳遞1KB的數(shù)據(jù)。而POST請(qǐng)求防暑,是通過實(shí)體傳遞數(shù)據(jù)的,因此傳遞數(shù)據(jù)的大小沒有限制。
第二:POST比GET請(qǐng)求方式更安全。由于GET請(qǐng)求方式的參數(shù)信息都會(huì)在URL地址欄中明文顯示,而POST請(qǐng)求方式傳遞的參數(shù)隱藏在實(shí)體內(nèi)容中,用戶是看不到的,因此,POST比GET請(qǐng)求方式更安全。
?
(2)HTTP請(qǐng)求消息頭
在HTTP請(qǐng)求消息中,在請(qǐng)求行之后變身若干個(gè)請(qǐng)求消息頭。請(qǐng)求消息頭主要用于向服務(wù)器端傳遞附加消息,例如,客戶端可以接收的數(shù)據(jù)類型、壓縮方法、語言以及發(fā)送請(qǐng)求的超鏈接所屬頁面的URL地址等信息。
從上面請(qǐng)求消息頭可以看出,每個(gè)請(qǐng)求消息頭都由一個(gè)頭字段名稱和一個(gè)值構(gòu)成的,頭字段名稱和值之間用(:)和空格分割,在每個(gè)請(qǐng)求消息頭之后使用一個(gè)回車換行符標(biāo)志結(jié)束。
需要注意的是,頭字段名稱不區(qū)分大小寫,但習(xí)慣上將單詞的第一個(gè)字母大寫。
當(dāng)瀏覽器發(fā)送請(qǐng)求給服務(wù)其時(shí),根據(jù)功能需求的不同,發(fā)送的請(qǐng)求消息頭也不相同。
1 Accept:瀏覽器可接受的MIME類型,告訴服務(wù)器客戶端能接收什么樣類型的文件。
2 Accept-Charset: 瀏覽器通過這個(gè)頭告訴服務(wù)器,它支持哪種字符集
3 Accept-Encoding:瀏覽器能夠進(jìn)行解碼的數(shù)據(jù)編碼方式,比如gzip
4 Accept-Language:瀏覽器所希望的語言種類,當(dāng)服務(wù)器能夠提供一種以上的語言版本時(shí)要用到。 可以在瀏覽器中進(jìn)行設(shè)置。
5 Host:初始URL中的主機(jī)和端口
6 Referrer:包含一個(gè)URL,用戶從該URL代表的頁面出發(fā)訪問當(dāng)前請(qǐng)求的頁面
7 Content-Type:內(nèi)容類型。告訴服務(wù)器瀏覽器傳輸數(shù)據(jù)的MIME類型,文件傳輸?shù)念愋? application/x-www-form-urlencoded
8 If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT利用這個(gè)頭與服務(wù)器的文件進(jìn)行比對(duì),如果一致,則從緩存中直接讀取文件。
9 User-Agent:瀏覽器類型.
10 Content-Length:表示請(qǐng)求消息正文的長度
11 Connection:表示是否需要持久連接。如果服務(wù)器看到這里的值為“Keep -Alive”,或者看到請(qǐng)求使用的是HTTP 1.1(HTTP 1.1默認(rèn)進(jìn)行持久連接
12 Cookie:這是最重要的請(qǐng)求頭信息之一 (在講會(huì)話時(shí)解析)
13 Date:Date: Mon, 22 Aug 2011 01:55:39 GMT請(qǐng)求時(shí)間GMT ?
4.HTTP響應(yīng)消息
當(dāng)服務(wù)器收到瀏覽器請(qǐng)求后,會(huì)收到響應(yīng)消息給客戶端。一個(gè)完整的響應(yīng)消息包括響應(yīng)狀態(tài)行、響應(yīng)消息頭和實(shí)體內(nèi)容。
?(1)HTTP響應(yīng)狀態(tài)行
HTTP/1.1 200 OKHTTP1.1:通信使用的協(xié)議版本(200是狀態(tài)碼)
OK:狀態(tài)描述,說明客戶請(qǐng)求成功
注意:請(qǐng)求行中的每個(gè)部分都需要空格分割,最后需要以回車換行結(jié)束 HTTP狀態(tài)碼
當(dāng)瀏覽者訪問一個(gè)網(wǎng)頁時(shí),瀏覽者的瀏覽器會(huì)向網(wǎng)頁所在服務(wù)器發(fā)出請(qǐng)求。當(dāng)瀏覽器接收并顯示網(wǎng)頁前,此網(wǎng)頁所在的服務(wù)器會(huì)返回一個(gè)包含HTTP狀態(tài)碼的信息頭(server header)用以響應(yīng)瀏覽器的請(qǐng)求。
HTTP狀態(tài)碼的英文為HTTP Status Code。狀態(tài)代碼由三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類別,且有五種可能取值。
- 1xx:指示信息--表示請(qǐng)求已接收,繼續(xù)處理。
- 2xx:成功--表示請(qǐng)求已被成功接收、理解、接受。
- 3xx:重定向--要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作。
- 4xx:客戶端錯(cuò)誤--請(qǐng)求有語法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn)。
- 5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求。
常見狀態(tài)代碼、狀態(tài)描述的說明如下。
- 200?OK:客戶端請(qǐng)求成功。
- 400 Bad Request:客戶端請(qǐng)求有語法錯(cuò)誤,不能被服務(wù)器所理解。
- 401 Unauthorized:請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用。
- 403 Forbidden:服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)。
- 404?Not Found:請(qǐng)求資源不存在,舉個(gè)例子:輸入了錯(cuò)誤的URL。
- 500?Internal Server Error:服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤。
- 503 Server Unavailable:服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常,舉個(gè)例子:HTTP/1.1 200 OK(CRLF)。
?(2)HTTP響應(yīng)消息頭
1 Location: http://www.it315.org/index.jsp指示新的資源的位置,通常和302/307一起使用,完成請(qǐng)求重定向
2 Server:apache tomcat指示服務(wù)器的類型
3 Content-Encoding: gzip服務(wù)器發(fā)送的數(shù)據(jù)采用的編碼類型
4 Content-Length: 80 告訴瀏覽器正文的長度
5 Content-Language: zh-cn服務(wù)發(fā)送的文本的語言
6 Content-Type: text/html; charset=GB2312服務(wù)器發(fā)送的內(nèi)容的MIME類型
7 Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改時(shí)間
8 Refresh: 1;url=http://www.it315.org指示客戶端刷新頻率。單位是秒
9 Content-Disposition: attachment; filename=aaa.zip指示客戶端下載文件
10 Set-Cookie:SS=Q0=5Lb_nQ; path=/search服務(wù)器端發(fā)送的Cookie
11 Expires: -1
12 Cache-Control: no-cache (1.1)
13 Pragma: no-cache (1.0) 表示告訴客戶端不要使用緩存
14 Connection: close/Keep-Alive
15 Date: Tue, 11 Jul 2000 18:23:51 GMT
? ??2018-09-21?20:20:46
轉(zhuǎn)載于:https://www.cnblogs.com/qqiua/p/9688319.html
總結(jié)
- 上一篇: k否
- 下一篇: 一起学Hadoop——实现两张表之间的连