請求的第一行是「方法URL議/版本」:GET/sample.jsp HTTP/1.1
以上代碼中「GET」表明請求方法,「/sample.jsp」表示URI,「HTTP/1.1表明協議和協議的版本。
根據HTTP標準,HTTP請求可使用多種請求方法。例如:HTTP1.1支持7種請求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet應用中,最經常使用的方法是GET和POST。
URL完整地指定了要訪問的網絡資源,一般只要給出相對於服務器的根目錄的相對目錄便可,所以老是以「/」開頭,最後,協議版本聲明瞭通訊過程當中使用HTTP的版本。
(2) 請求頭(Request Header)
請求頭包含許多有關的客戶端環境和請求正文的有用信息。例如,請求頭能夠聲明瀏覽器所用的語言,請求正文的長度等。
Accept:image/gif.image/jpeg.*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
Accept-Encoding:gzip,deflate.
(3) 請求正文
請求頭和請求正文之間是一個空行,這個行很是重要,它表示請求頭已經結束,接下來的是請求正文。請求正文中能夠包含客戶提交的查詢字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP請求中,請求的正文只有一行內容。固然,在實際應用中,HTTP請求正文能夠包含更多的內容。
HTTP請求方法我這裏只討論GET方法與POST方法
l GET方法
GET方法是默認的HTTP請求方法,咱們平常用GET方法來提交表單數據,然而用GET方法提交的表單數據只通過了簡單的編碼,同時它將做爲URL的一部分向Web服務器發送,所以,若是使用GET方法來提交表單數據就存在着安全隱患上。例如
從上面的URL請求中,很容易就能夠辯認出表單提交的內容。(?以後的內容)另外因爲GET方法提交的數據是做爲URL請求的一部分因此提交的數據量不能太大
l POST方法
POST方法是GET方法的一個替代方法,它主要是向Web服務器提交表單數據,尤爲是大批量的數據。POST方法克服了GET方法的一些缺點。經過POST方法提交表單數據時,數據不是做爲URL請求的一部分而是做爲標準數據傳送給Web服務器,這就克服了GET方法中的信息沒法保密和數據量過小的缺點。所以,出於安全的考慮以及對用戶隱私的尊重,一般表單提交時採用POST方法。
從編程的角度來說,若是用戶經過GET方法提交數據,則數據存放在QUERY_STRING環境變量中,而POST方法提交的數據則能夠從標準輸入流中獲取。
HTTP應答與HTTP請求類似,HTTP響應也由3個部分構成,分別是:
l 協議狀態版本代碼描述
l 響應頭(Response Header)
l 響應正文
下面是一個HTTP響應的例子:
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
<html>
<head>
<title>HTTP響應示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>
協議狀態代碼描述HTTP響應的第一行相似於HTTP請求的第一行,它表示通訊所用的協議是HTTP1.1服務器已經成功的處理了客戶端發出的請求(200表示成功):
HTTP/1.1 200 OK
響應頭(Response Header)響應頭也和請求頭同樣包含許多有用的信息,例如服務器類型、日期時間、內容類型和長度等:
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:13:33 GMT
Content-Type:text/html
Last-Moified:Mon,6 Oct 2003 13:23:42 GMT
Content-Length:112
響應正文響應正文就是服務器返回的HTML頁面:
<html>
<head>
<title>HTTP響應示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>
響應頭和正文之間也必須用空行分隔。
l HTTP應答碼
HTTP應答碼也稱爲狀態碼,它反映了Web服務器處理HTTP請求狀態。HTTP應答碼由3位數字構成,其中首位數字定義了應答碼的類型:
1XX-信息類(Information),表示收到Web瀏覽器請求,正在進一步的處理中
2XX-成功類(Successful),表示用戶請求被正確接收,理解和處理例如:200 OK
3XX-重定向類(Redirection),表示請求沒有成功,客戶必須採起進一步的動做。
4XX-客戶端錯誤(Client Error),表示客戶端提交的請求有錯誤 例如:404 NOT
Found,意味着請求中所引用的文檔不存在。
5XX-服務器錯誤(Server Error)表示服務器不能完成對請求的處理:如 500
對於咱們Web開發人員來講掌握HTTP應答碼有助於提升Web應用程序調試的效率和準確性。
安全鏈接
Web應用最多見的用途之一是電子商務,能夠利用Web服務器端程序令人們可以網絡購物,須要指出一點是,缺省狀況下,經過Internet發送信息是不安全的,若是某人碰巧截獲了你發給朋友的一則消息,他就能打開它,假想在裏面有你的信用卡號碼,這會有多麼糟糕,幸運的是,不少Web服務器以及Web瀏覽器都有創立安全鏈接的能力,這樣它們就能夠安全的通訊了。
經過Internet提供安全鏈接最多見的標準是安全套接層(Secure Sockets layer,SSl)協議。SSL協議是一個應用層協議(和HTTP同樣),用於安全方式在Web上交換數據,SSL使用公開密鑰編碼系統。從本質講,這意味着業務中每一方都擁有一個公開的和一個私有的密鑰。當一方使用另外一方公開密鑰進行編碼時,只有擁有匹配密鑰的人才能對其解碼。簡單來說,公開密鑰編碼提供了一種用於在兩方之間交換數據的安全方法,SSL鏈接創建以後,客戶和服務器都交換公開密鑰,並在進行業務聯繫以前進行驗證,一旦雙方的密鑰都經過驗證,就能夠安全地交換數據。
GET
經過請求URI獲得資源html
POST,
用於添加新的內容apache
PUT
用於修改某個內容編程
DELETE,
刪除某個內容瀏覽器
CONNECT,
用於代理進行傳輸,如使用SSL安全
OPTIONS
詢問能夠執行哪些方法服務器
PATCH,
部分文檔更改網絡
PROPFIND, (wedav)
查看屬性jsp
PROPPATCH, (wedav)
設置屬性ide
MKCOL, (wedav)
建立集合(文件夾)編碼
COPY, (wedav)
拷貝
MOVE, (wedav)
移動
LOCK, (wedav)
加鎖
UNLOCK (wedav)
解鎖
TRACE
用於遠程診斷服務器
HEAD
相似於GET, 可是不返回body信息,用於檢查對象是否存在,以及獲得對象的元數據
apache2中,可以使用Limit,LimitExcept進行訪問控制的方法包括:GET
, POST
, PUT
, DELETE
, CONNECT
,OPTIONS
, PATCH
, PROPFIND
, PROPPATCH
, MKCOL
, COPY
, MOVE
, LOCK
, 和 UNLOCK
.
其中, HEAD GET POST OPTIONS PROPFIND是和讀取相關的方法,MKCOL PUT DELETE LOCK UNLOCK COPY MOVE PROPPATCH是和修改相關的方法