筆記摘要:
作爲web開發的前奏,這裏介紹了什麼是HTTP協議,HTTP請求與HTTP響應信息的介紹
一、什麼是HTTP協議
客戶端連上web服務器後,若想獲得web服務器中的某個web資源,需遵守一定的通訊格式,HTTP協議用於定義客戶端與web服務器通迅的格式。
HTTP是hypertext transfer protocol(超文本傳輸協議)的簡寫,它是TCP/IP協議的一個應用層協議,用於定義WEB瀏覽器與WEB服務器之間交換數據的過程。
HTTP協議是學習JavaWEB開發的基石,不深入瞭解HTTP協議,就不能說掌握了WEB開發,更無法管理和維護一些複雜的WEB站點。
二、HTTP協議簡介
HTTP使用請求-響應的方式進行傳輸,一個請求對應一個響應,並且請求只能是由客戶端發起的。
HTTP協議的版本:HTTP/1.0、HTTP/1.1
在HTTP1.0協議中,客戶端與web服務器建立連接後,只能獲得一個web資源。
HTTP1.1協議,允許客戶端與web服務器建立連接後,在一個連接上獲取多個web資源。
三、HTTP請求
客戶端連上服務器後,向服務器請求某個web資源,稱之爲客戶端向服務器發送了一個HTTP請求。一個完整的HTTP請求包括如下內容:
一個請求行、若干請求頭、以及實體內容,如下所示 :
HTTP請求行
請求方式詳細介紹(1)請求行:GET /books/java.html HTTP/1.1(請求方式 請求資源 所用協議)
(2)請求方式:GET、POST,默認情況下瀏覽器都是get方式的請求,只用表單的method設置爲POST纔是post請求
請求行中的GET稱之爲請求方式,請求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT常用的有: GET、 POST
用戶如沒有設置,默認情況下瀏覽器向服務器發送的都是GET請求,例如在瀏覽器直接輸地址訪問,點超鏈接訪問等都是GET,用戶如想把請求方式改爲POST,可通過更改表單的提交方式實現。
不管POST或GET,都用於向服務器請求某個WEB資源,這兩種方式的區別主要表現在數據傳遞上:
如請求方式爲GET方式,則可以在請求的URL地址後以?的形式帶上交給服務器的數據,多個數據之間以&進行分隔,例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1
Get和post方式的區別:
HTTP請求的細節——常見請求頭Get:會將提交的數據顯示在地址欄上。
Post:不會將數據顯示在地址欄上
Get:提交數據的體積受地址欄的限制。
Post:可以提交大體積的數據
Get:對於敏感信息不安全。
Post:對於敏感信息安全
Get:會將提交信息封裝在請求行,也就是http消息頭之前
Post:會將提交信息封裝在數據體中,也就是http消息頭之後的空行後
對於服務端而言:
表單提交儘量用post,因爲涉及到編碼問題,因爲tomcat服務端默認的解碼是ISO8859-1
對於post提交的中文,在服務端可以直接使用setCharacterEncoding(”gbk”)就可以解決
對於get提交的中文,在服務端只能通過IOS8859-1將數據解碼一次,再通過指定的碼錶GBK解碼
Accept: text/html,image/* 可以接受的數據格式
Accept-Charset: ISO-8859-1可以接受的字符集編碼
Accept-Encoding: gzip,compress可以接受的壓縮格式
Accept-Language: en-us,zh-cn 瀏覽器的語言環境
Host: www.it315.org:80所要訪問的虛擬主機名
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT 配合Last-Modified判斷資源是否更新過
Referer: http://www.it315.org/index.jsp 表示當前請求來自哪個頁面,防盜鏈用。
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) 瀏覽器所在環境信息
Cookie
Connection: close/Keep-Alive 是否保持連接
Date: Tue, 11 Jul 2000 18:23:51 GMT日期時間
五、HTTP響應
HTTP響應分爲:狀態行、若干響應頭、一個空行、實體內容
一個HTTP響應代表服務器向客戶端回送的數據,它包括:
一個狀態行、若干響應頭(消息頭)、以及實體內容
HTTP響應的細節——狀態行
狀態碼用於表示服務器對請求的處理結果,它是一個三位的十進制數。響應狀態碼分爲5類,如下所示:
(1)狀態行
格式: HTTP版本號 狀態碼 原因敘述<CRLF>舉例:HTTP/1.1 200 OK
HTTP/1.1 200 OK (需用協議版本 狀態碼 原因描述)
常用狀態碼:
200 成功
302 請求重定向,配合Location頭使用
304、307 使用緩存資源
404 請求資源未找到
500 服務器端錯誤
(2)常用響應頭
Location: http://www.it315.org/index.jsp 配合302使用,重定向的地址
Server:apache tomcat服務器信息
Content-Encoding: gzip 傳輸數據所用的壓縮格式
Content-Length: 80 數據長度
Content-Language: zh-cn 語言環境
Content-Type: text/html; charset=GB2312 傳輸數據的類型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT配合If-Modified-Since使用判斷資源是否更新過
Refresh: 1;url=http://www.it315.org定時刷新,第一個參數表示隔多長時間刷新,第二個參數表明刷新到哪個URL,如果沒有第二個參數就刷新當前頁面
Content-Disposition: attachment;filename=aaa.zip下載相關頭
Transfer-Encoding: chunked 傳輸數據的方式
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
ETag: W/"83794-1208174400000"配合If-None-Match使用判斷資源是否有過修改
Expires: -1 設置緩存時間,可以被設置爲一個時間值,指定資源緩存到何時,如果設置爲0或-1,則不緩存
Cache-Control: no-cache 設置不緩存
Pragma: no-cache 設置不緩存
* 以上三個頭都是用來控制緩存的,是由於歷史原因導致不同瀏覽器使用不同頭,我們一般同時使用這三個。
Connection: close/Keep-Alive 是否保持連接
Date: Tue, 11 Jul 2000 18:23:51 GMT 日期時間