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