1.HTTP協議簡介
(1)客戶端連上web服務器后,若想獲得web服務器中的某個web資源,需遵守一定的通訊格式,HTTP協議用于定義客戶端與web服務器通迅的格式。
(2)HTTP是hypertext transfer protocol(超文本傳輸協議)的簡寫,它是TCP/IP協議的一個應用層協議,用于定義WEB瀏覽器與WEB服務器之間交換數據的過程。
(3)HTTP使用請求-響應的方式進行傳輸,一個請求對應一個響應,并且請求只能是由客戶端發起的。
(4)HTTP協議的版本:HTTP/1.0、HTTP/1.1
兩個版本的區別:
在HTTP1.0協議中,客戶端與web服務器建立連接后,只能獲得一個web資源。
HTTP1.1協議,允許客戶端與web服務器建立連接后,在一個連接上獲取多個web資源。
2.HTTP請求
客戶端連上服務器后,向服務器請求某個web資源,稱之為客戶端向服務器發送了一個HTTP請求。一個完整的HTTP請求包括:一個請求行、若干請求頭、以及實體內容。
例:
2.1 HTTP請求行
請求行:GET /books/java.html HTTP/1.1
GET:請求方式。
/books/java.html :請求的資源
HTTP/1.1 :請求協議
請求行中的請求方式有7種,下表為各請求方式的簡要介紹。
方法 | 意義 |
---|---|
OPTION | 請求一些選項的信息 |
GET | 向服務器請求某種WEB資源 |
HEAD | 請求讀取由URL所標志的信息的首部 |
POST | 向服務器請求某種WEB資源 |
PUT | 在指明的URL下存儲一個文檔 |
DELETE | 刪除指明的URL下所標志的資源 |
TRACE | 用來進行環回測試的請求報文 |
CONNECT | 用于代理服務器 |
請求方式總共有7種,但是最常用的有兩種,即 GET 和 POST。
不管POST或GET,都用于向服務器請求某個WEB資源,這兩種方式的區別主要表現在數據傳遞上:
GET
如請求方式為GET方式,則可以在請求的URL地址后以?的形式帶上交給服務器的數據,多個數據之間以&進行分隔。
例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特點:在URL地址后附帶的參數是有限制的,其數據容量通常不能超過1K。POST
如請求方式為POST方式,則可以在請求的實體內容中向服務器發送數據。
Post方式的特點:傳送的數據量無限制。
注:若用戶如沒有設置,默認情況下瀏覽器向服務器發送的都是get請求
2.2 HTTP消息頭
用于HTTP請求中的常用頭
Accept: text/html,image/* ????????//瀏覽器可以接受哪種格式的數據
Accept-Charset: ISO-8859-1 ????????//瀏覽器接受數據可以采用的編碼集
Accept-Encoding: gzip,compress*????????//瀏覽器可以接受的數據壓縮格式*
Accept-Language: en-us,zh-cn????????//瀏覽器所在的語言環境
Host: www.baidu.com:80 ????????//瀏覽器所要訪問的區域
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT ????????//與緩存相關的頭
Referer: http://www.baidu.com/index.html????????//表示當前訪問的web資源的連接來自何處,與防盜鏈有關
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 ????????//當前時間
3.HTTP響應
一個HTTP響應代表服務器向客戶端回送的數據,它包括:
一個狀態行、若干響應頭(消息頭)、以及實體內容
例:
3.1 HTTP狀態行
格式:格式: HTTP版本號 狀態碼 原因敘述
舉例: HTTP/1.1 200 OK
其中狀態碼用于表示服務器對請求的處理結果,它是一個三位的十進制數。響應狀態碼分為5類,如下所示:
狀態碼 | 含義 |
---|---|
100~199 | 表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程 |
200~299 | 表示成功接收請求并已完成整個處理過程,常用200 |
300~399 | 為完成請求,客戶需進一步細化請求。例如,請求的資源已經移動一個新地址,常用302、307和304 |
400~499 | 客戶端的請求有錯誤,常用404 |
500~599 | 服務器端出現錯誤,常用 500 |
常用的狀態碼有:
200:表示請求處理成功。
302:表示請求重定向。
304/307:表示通知瀏覽器再次請求的資源沒有更改,請使用瀏覽器緩存中的資源。
404:表示請求的資源沒有找到。
500:表示服務器端出錯。
3.2 HTTP常用響應頭
Location: http://www.baidu.com.index.html ???//配合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 ???//與緩存相關
Refresh: 1;url=http://www.baidu.com
//通過瀏覽器進行定時刷新,此值可以是一個數字指定多長時間以后刷新當前頁面,這個數字之后也可以接一個分號跟一個URL地址指定多長時間后跳轉到該URL地址
Content-Disposition: attachment;filename=aaa.zip ???//與下載相關
Transfer-Encoding: chunked
傳輸數據類型,如果此值為chunked,說明當前的數據是一塊一塊傳輸的。
Set-Cookie:SS=Q0=5Lb_nQ; path=/search ???//與Cookie會話相關
ETag: W/”83794-1208174400000” ???//和緩存機制相關
Expires: -1 ???//指定資源緩存的時間,如果取值為0或-1瀏覽器就不緩存資源。
Cache-Control: no-cache ???//與緩存相關,如果為no-cache則通知瀏覽器不緩存
Pragma: no-cache ???//與緩存相關,如果為no-cache則通知瀏覽器不緩存
Connection: close/Keep-Alive ???//是否保持連接
Date: Tue, 11 Jul 2000 18:23:51 GMT ???//當前時間