javaWeb -- HTTP協議

筆記摘要:

作爲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


Getpost方式的區別:

Get:會將提交的數據顯示在地址欄上。

Post:不會將數據顯示在地址欄上


Get:提交數據的體積受地址欄的限制。

Post:可以提交大體積的數據

Get:對於敏感信息不安全。

Post:對於敏感信息安全

Get:會將提交信息封裝在請求行,也就是http消息頭之前

Post:會將提交信息封裝在數據體中,也就是http消息頭之後的空行後

對於服務端而言:

表單提交儘量用post,因爲涉及到編碼問題,因爲tomcat服務端默認的解碼是ISO8859-1

對於post提交的中文,在服務端可以直接使用setCharacterEncoding”gbk”)就可以解決

對於get提交的中文,在服務端只能通過IOS8859-1將數據解碼一次,再通過指定的碼錶GBK解碼


HTTP請求的細節——常見請求頭

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 日期時間


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章