Http協議由Tim BernersLee(被稱為Web之父)發明Http協議是完全基於文本的浏覽器通過http協議和服務器交互默認是端口也可以顯式的在URL中指出端口號比如Http協議是一種無狀態協議並且不適合實時的獲取數據的應用因為過多實時的客戶端和服務端的交互將會導致網絡的頻繁通信並受到帶寬的限制Http協議也不能告訴服務器客戶的請求是如何產生的這使得B/S比C/S實現上難度較大
浏覽器主要有兩種命令和服務器交互一種叫Get另一種叫Post邏輯上看Get命令相當於讀操作向服務器發出請求然後獲取數據Post命令向服務器發出執行某個動作的指令有可能會修改服務器上的某些數據因此是不可逆的操作我們要防止用戶不斷的快速刷新頁面引發的Post命令通常一個提示對話框讓用戶確認操作是否真的有必要進行是一種常用的方法
Get命令的格式請求行請求首部請求主體(可選)
GET /indexhtml HTTP/
Host: wwwgefionsoftwarecom
UserAgent: Mozilla/ [en] (WinNT;I)
Accept: image/gif image/jpeg image/pjpeg image/ping*/*
AcceptLanguage : en
AcceptCharset : iso*utf
上面的例子裡面第一行是請求行表明是GET命令請求的資源是indexhtml 協議是HTTP後面所有的都是請求首部沒有請求主體
服務器的應答格式狀態行應答首部應答主體(可選)
HTTP/ OK
LastModified: Mon Dec ::: GMT
Date: Tue Jan :: GMT
Status:
ContentType: text/html
ServletEngine: Tomcat Web Server/
ContentLength:
<html>
<body>
<h>Helloworld!</h>
</body>
</html>
第一行是狀態行協議+狀態值+狀態描述然後是應答首部最後一段html代碼是應答主體我們經常能看到狀態值為的回應代表未被授權
如果應答主體比較復雜裡面包含了圖片或者其他資源的鏈接客戶端會自動再發出一個Get命令獲取相關資源通常這些動作是並行的不過每個浏覽器的行為不一樣IE似乎表現成串行而Firefox會先將第一個應答主體的內容顯示出來在逐個顯示內嵌圖片的應答主體
Get命令還可加上請求參數請求參數可以接著url後面比如
?a=&b= ?開始&間隔每個參數名稱和值對這種方式稱為查詢字符串由於使用了?=&來作為分隔符所以其他的字符在發送時都采用了URL編碼方式以避免混淆歡迎光臨學網收藏本篇文章 [] []
$False$
也可以將請求參數(格式相同)作為請求主體的一部分發送不過這通常是Post命令的做法
Post命令格式
POST forecast HTTP/
Host: wwwgefionsoftwarecom
UserAgent:Mozilla/ [en] (WinNT; I)
Accept: image/gif image/jpeg image/pjpegimage/png */*
Acceptlanguage: en
Acceptcharset: iso*utf
city=Hermosa+Beach&state=CA
Post行中的 forecast是action的名稱後面是協議名注意最後一行的查詢字符串沒有?開頭並且是嵌入在Post主體中的通常Post由form表單觸發比如上面的命令對應的form表單為
<form action: “/forecast” method=”POST”>
City: <input name=”city” type=”text”>
State: <input name=”state” type=”text>
<p>
<input type=”SUBMIT”>
</form>
注意這裡第一行加了屬性method=”POST”如果不加的話默認為GET
HTTP協議的其它方法還有OPTIONSHEADPUTDELETETRACE等五個但是這些方法使用的很少
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20019.html