HTTP的基本原理
使用者訪問全球資訊網文件,全球資訊網文件之間的連結以及全球資訊網文件中資料傳送到使用者計算機,這些功能的實現都是由超文字傳輸協議HTTP(HyperTextTransferProtocol)負責完成的。HTTP是一個應用層協議,它使用TCP連線進行可靠的傳送,能夠在全球資訊網上進行文字、聲音、影象、視訊等各種資訊的交換。
HTTP協議也是工作在客戶機/伺服器模式下,分為HTTP客戶端和HTTP伺服器兩個部分,雙方每次進行互動,都是由客戶端發出的請求和伺服器端發出的響應構成。HTTP協議規定的使用者使用瀏覽器訪問全球資訊網的過程可以總結為:
1.使用者在瀏覽器中鍵入需要訪問網頁的URL或者點選某個網頁中連結;
2.瀏覽器根據URL中的域名,通過DNS解析出目標網頁的IP地址;
3.瀏覽器與網頁所在伺服器建立TCP連線;
4.瀏覽器傳送HTTP請求報文,獲取目標網頁的檔案;
5.伺服器傳送HTTP響應報文,將目標網頁檔案傳送給瀏覽器;
6.釋放TCP連線;
7.瀏覽器將網頁的內容包括文字、影象、聲音等顯示呈現在使用者計算機螢幕。
HTTP協議是無連線的,它使用面向連線的TCP協議所提供的服務。同時,HTTP協議也是無狀態的,即伺服器端不記錄客戶端訪問的時間和次數。最初的HTTP協議版本是1.0版,使用非持續連線(nonpersistentconnection)。每傳輸一個物件都需要利用
HTTP報文是面向文字的,報文中的每一個欄位都是一些ASCII碼串,各個欄位的長度是不確定的。HTTP有兩類報文:請求報文和響應報文。請求報文是從客戶端向伺服器傳送的報文,響應報文是從伺服器到客戶端的報文。下面分別介紹請求報文和響應報文的具體格式。
1.HTTP請求報文格式
HTTP請求報文的由請求行、請求頭部行、空行和請求資料四部分構成,具體格式如下所示:
(請求行)方法名+空格+URL+空格+版本+回車換行(\r\n)
(請求頭部行1)關鍵字+“:”+空格+值+回車換行(\r\n)
……
(請求頭部行N)關鍵字+“:”+空格+值+回車換行(\r\n)
(空行)回車換行(\r\n)
(請求資料)……
(1)請求行
請求行由請求方法欄位、URL欄位和HTTP協議版本欄位3個欄位組成,它們用空格分隔。最後由回車和換行表示請求行結束。例如:
GET www.sdu.edu.cn HTTP/1.1回車換行(\r\n)
其中“方法”欄位表示該請求報文希望伺服器做什麼,請求報文的型別就是由所採用的方法決定的。HTTP請求報文的主要方法包括:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT等。最常見的方法有GET和HEAD。
GET是最常見的一種請求方式,當客戶端要從伺服器中讀取文件時,當點選網頁上的連結或者通過在瀏覽器的位址列輸入網址來瀏覽網頁,使用的都是GET方式。GET方法要求伺服器將URL定位的資源放在響應報文的資料部分,回送給客戶端。GET方式不適合傳送私密資料和大量資料。
HEAD的功能與GET相似,只是伺服器端接收到HEAD請求後只返回響應頭,而不會發送響應內容。當我們只需要檢視某個頁面的狀態的時候,使用HEAD是非常高效的,因為在傳輸的過程中省去了頁面內容。
(2)請求頭部行(header)
請求頭部行包括若干行,每行由關鍵字及其值構成的,關鍵字和值用英文冒號“:”分隔,每一行都由回車換行表示結束。請求頭部通知伺服器有關於客戶端請求的資訊,典型的請求頭部關鍵字有:
User-Agent:產生請求的瀏覽器型別。
Accept:客戶端可識別的內容型別列表。
Accept-Language:客戶端可識別的語言型別
。
Host:請求的主機名。
Connection:告知伺服器傳送完文件後釋放連線還是保持連線。
(3)空行
最後一個請求頭部之後是一個空行,傳送回車符和換行符,通知伺服器以下不再有請求頭部了。
(4)請求資料
GET方法中沒有請求資料的內容,POST方法使用請求資料,用於客戶端向伺服器端填寫表單等操作。
比如瀏覽器使用GET方法訪問山東大學主頁中的“學校簡介”文件(URL為www.sdu.edu.cn/2010/xxjj.htm),則其HTTP請求報文可以為:
GET/2010/xxjj.html HTTP/1.1 \r\n
Host:www.sdu.edu.cn\r\n
User-Agent:Mozilla/5.0
Accept-Language:cn*/*\r\n
2.響應報文格式
HTTP響應也由四個部分組成,分別是:狀態行、訊息頭部、空行和響應正文。其具體格式如下:
(狀態行)版本+空格+狀態碼+空格+短語+回車換行
(訊息頭部1)關鍵字+“:”+空格+值+回車換行
……
(訊息頭部N)關鍵字+“:”+空格+值+回車換行
(空行)回車換行(\r\n)
(響應正文)……
在響應報文的狀態行中,版本字的表示伺服器HTTP協議的版本,狀態碼字的表示伺服器發回的響應狀態程式碼;短語欄位表示狀態程式碼的文字描述。狀態碼由三位十進位制數字組成,第一個數字定義了響應的類別,有五種可能取值(1-5),每種狀態碼的含義如下:
1xx:指示資訊。表示請求已接收,繼續處理。
2xx:成功。表示請求已被成功接收、理解、接受。
3xx:重定向。要完成請求必須進行更進一步的操作。
4xx:客戶端錯誤。請求有語法錯誤或請求無法實現。
5xx:伺服器端錯誤。伺服器未能實現合法的請求。
常見狀態碼及狀態描述的說明如下:
200 OK:客戶端請求成功。
400 Bad Request:客戶端請求有語法錯誤,不能被伺服器所理解。
401 Unauthorized:請求未經授權。
403 Forbidden:伺服器收到請求,但是拒絕提供服務。
404 Not Found:請求資源不存在,比如輸入了錯誤的URL。
500 Internal ServerError:伺服器發生不可預期的錯誤。
503 ServerUnavailable:伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常。
訊息頭部與請求頭部的格式相似,也是包含若干行,每行由關鍵字及其值構成,常用的關鍵字包括:
Date:表示返回訊息的時間。
Content-Type:表示返回訊息的內容型別。
Content-Length:返回內容的長度(位元組數)。
Server:使用的伺服器軟體及其版本號。
同樣,最後一個訊息頭部之後是一個空行,傳送回車符和換行符,通知客戶端以下不再有訊息頭部了。
響應正文部分是伺服器端根據客戶端的請求發回的具體文件內容,以HTML語言表示。