HTTP基礎(chǔ):URL格式,、 HTTP請求、響應(yīng),、消息HTTP URL格式: http://host[:port][abs_path] 其中http表示要通過HTTP協(xié)議來定位網(wǎng)絡(luò)資源,。 host表示合法的Internet主機(jī)域名或IP地址(以點分十進(jìn)制格式表示); port用于指定一個端口號,,擁有被請求資源的服務(wù)器主機(jī)監(jiān)聽該端口的TCP連接,。 如果port是空,則使用缺省的端口80,。當(dāng)服務(wù)器的端口不是80的時候,,需要顯式指定端口號。 abs_path指定請求資源的URI(Uniform Resource Identifier,,統(tǒng)一資源定位符),,如果URL中沒有給出abs_path,,那么當(dāng)它作為請求URI時,必須以“/”的形式給出,。通常這個工作瀏覽器就幫我們完成了,。
瀏覽器與服務(wù)器連接的一般過程: (以sohu網(wǎng)站為例):
URL與URIURI純粹是一個符號結(jié)構(gòu),,用于指定構(gòu)成Web資源的字符串的各個不同部分,。 URL是一種特殊類型的URI,它包含了用于查找某個資源的足夠的信息,。 其他的URI,,例如:mailto:[email protected],則不屬于URL,,因為它里面不存在根據(jù)該標(biāo)識符來查找的任何數(shù)據(jù),。這種URI稱為URN(通用資源名)。
HTTP請求客戶端通過發(fā)送HTTP請求向服務(wù)器請求對資源的訪問,。 HTTP請求由三部分組成,,分別是:請求行,消息報頭,,請求正文,。 請求行以一個方法符號開頭,后面跟著請求URI和協(xié)議的版本,,以CRLF作為結(jié)尾,。 請求行以空格分隔。除了作為結(jié)尾的CRLF外,,不允許出現(xiàn)單獨的CR或LF字符,,格式如下: Method Request-URI HTTP-Version CRLF Method表示請求的方法,Request-URI是一個統(tǒng)一資源標(biāo)識符,,標(biāo)識了要請求的資源,,HTTP-Version表示請求的HTTP協(xié)議版本,CRLF表示回車換行,。
例如: GET /test.html HTTP/1.1 (CRLF)
HTTP請求方法 GET方法 GET方法用于獲取由Request-URI所標(biāo)識的資源的信息,,常見形式是: GET Request-URI HTTP/1.1 當(dāng)我們通過在瀏覽器的地址欄中直接輸入網(wǎng)址的方式去訪問網(wǎng)頁的時候,瀏覽器采用的就是GET方法向服務(wù)器獲取資源,。
POST方法 POST方法用于想服務(wù)器發(fā)送請求,,這點和GET方法沒有區(qū)別。但是POST方法要求服務(wù)器接收附在請求后面的數(shù)據(jù),。 POST方法在表單提交的時候用的最多,。 采用POST方法提交表單的例子 POST /login.jsp HTTP/1.1 (CRLF) Accept: image/gif (CRLF) (…) Host: www.sample.com (CRLF) (…) … Cache-Control: no-cache (CRLF) (CRLF) username=hello&password=123456 當(dāng)我們在HTML中提交表單時,瀏覽器會根據(jù)你的提交方法是get還是post,,采用相應(yīng)的在HTTP協(xié)議中的GET或POST方法,,向服務(wù)器發(fā)出請求,。 注意,在HTML文檔中,,書寫get和post,,不區(qū)分大小寫,但HTTP協(xié)議中的GET和POST只能是大寫形式,。
HEAD方法 HEAD方法與GET方法幾乎是一樣的,,它們的區(qū)別在于HEAD方法只是請求消息報頭,而不是完整的內(nèi)容,。 對于HEAD請求的回應(yīng)部分來說,,它的HTTP頭部中包含的信息與通過GET請求所得到的信息是相同的。 利用這個方法,,不必傳輸整個資源的內(nèi)容,,就可以得到Request-URI所標(biāo)識的資源的信息。 這個方法通常用于測試超鏈接的有效性,,是否可以訪問,以及最近是否更新等,。
HTTP響應(yīng)在接收和解釋請求消息后,,服務(wù)器會返回一個HTTP響應(yīng)消息。 與HTTP請求類似,,HTTP響應(yīng)也是由三個部分組成,,分別是:狀態(tài)行,消息報頭,,相應(yīng)正文,。 狀態(tài)行由協(xié)議版本,數(shù)字形式的狀態(tài)代碼,,相應(yīng)的狀態(tài)描述組成,,各元素之間以空格分隔,除了結(jié)尾的CRLF(回車換行)序列外,,不允許出現(xiàn)CR或LF字符,。格式如下: HTTP-Version Status-Code Reason-Phrase CRLF HTTP-Version表示服務(wù)器HTTP協(xié)議的版本,Status-Code表示服務(wù)器發(fā)回的響應(yīng)代碼,,Reason-Phrase表示狀態(tài)代碼的文本描述,,CRLF表示回車換行。 例如: HTTP/1.1 200 OK (CRLF)
HTTP響應(yīng)——狀態(tài)代碼與狀態(tài)描述狀態(tài)代碼由三位數(shù)字組成,,表示請求是否被理解或被滿足,,狀態(tài)描述給出了關(guān)于狀態(tài)代碼的簡短文本描述。 狀態(tài)代碼的第一個數(shù)字定義了響應(yīng)的類別,,后面兩個數(shù)字沒有具體的分類,。
第一個數(shù)字有五種可能的取值: 1xx:指示信息——表示請求已接收,,繼續(xù)處理 2xx:成功——表示請求已經(jīng)被成功接收,理解,,接受 3xx:重定向——要完成請求必須進(jìn)行更進(jìn)一步的操作 4xx:客戶端錯誤——請求有語法錯誤或請求無法實現(xiàn) 5xx:服務(wù)器端錯誤——服務(wù)器未能實現(xiàn)合法的請求 如:
狀態(tài)行由協(xié)議版本,,數(shù)字形式的狀態(tài)代碼,相應(yīng)的狀態(tài)描述組成,,各元素之間以空格分隔,,除了結(jié)尾的CRLF(回車換行)序列外,不允許出現(xiàn)CR或LF字符,。格式如下: HTTP-Version Status-Code Reason-Phrase CRLF HTTP消息HTTP消息由客戶端到服務(wù)器的請求和服務(wù)器到客戶端的響應(yīng)組成,。 請求消息和響應(yīng)消息都是由開始行,消息報頭(可選),,空行(只有CRLF的行),,消息正文(可選)組成。 對于請求消息,,開始行就是請求行,,對于相應(yīng)消息,開始行就是狀態(tài)行,。 實驗工具:Telnet HTTP協(xié)議與TELNET協(xié)議都是基于TCP協(xié)議,。
參考資料圣思園Java Web培訓(xùn)視頻教程。 HTTP狀態(tài)碼查詢:http:///
|
|