Http協議中的方法

孟巖老師將“REST”稱爲一場Web開發思想的變革,而就我個人理解而言,REST對Mashup應用的價值要遠大於對Web應用架構的影響。

這裏不想糾纏於REST和MashUp兩個概念,關於它們的文章我已經寫了一些,不過還暫時不打算髮在blog中。

打算介紹一下http協議中涉及的方法,在互聯網上搜索了很久,發現中文文章中深究http協議的很少,通常談到http協議也只是關注於Get和Post兩個方法,最多提一下head方法。

因爲有需要,所以我就再次做一下科普。

如果可以的話,請進入windows命令行,如果你使用的是非windows操作系統的話,我相信你肯定知道如何進入命令行。

輸入:

telnet www.google.com 80

很快你的命令行窗口變得一團漆黑了,而這個時候的你,已經開始訪問google的web了。與我們通常使用瀏覽器後的感覺不同,現在的你無所適從。

如果你願意嘗試,現在的你輸入get或者head等都可以獲得響應,只不過響應的內容讓人有些失望。

通常瀏覽器會幫助我們構建http的協議頭信息,從而向對方服務器發送包,獲得響應的http協議頭信息和正文內容,再將正文內容解析展示在我們面前。

如果你使用過任何sniffer工具,你都會發現,http協議頭中通常我們的起始內容是get或post。雖然瀏覽器能夠幫助我們只是發送head請求,但通常我們不會這樣去做。

http協議只有get、post和head方法麼?它還包含些什麼方法呢?

關於http協議涉及方法的兩個名詞解釋:safe型方法和Idempotent型方法。

safe型方法通常是指不影響服務器端資源的行爲,它的操作結果僅僅是讀取信息,GET和HEAD多數情況下被認爲具有“safe”的特性。

Idempotent型方法正如Idempotent這個詞的意思一樣,如果一個方法,n次調用與一個獨立請求所產生的資源消耗相同,即沒有邊際損耗,則我們可以認爲這類方法是idempotent型方法,get、head、put、delete、options和trace都具有這樣的特性。

http協議通常包括的方法有很多,以下我只列出我在http/1.1協議定義中看到的方法:get、post、head、options、put、delete、trace、connect。

get方法用於獲取URI資源,是最爲常用的一種方法。

post方法用於向指定URI提交內容,服務器端響應其行爲,該方法也極爲常用。

head方法向URI發送請求,僅僅只需要獲得響應的協議頭。

put方法用於向URI發送請求,若URI不存在,則要求服務器端根據請求創建資源。當URI存在時,服務器端必須接受請求內容,將其作爲URI資源的修改後版本。

delete方法用於刪除URI標識的指定資源。

trace方法用於激活服務器端對請求的循環反饋,反饋作爲http響應的正文內容被傳輸回客戶端。

connect方法通常被用於使用代理連接。

對於上面提到的這些方法,相信大家如果肯花時間,自然可以在http協議的標準中看到更加詳細的內容。但有一點是我需要說明的,以上提到的方法,除了get、post和head可以通過瀏覽器應用外,其它的方法例如put和delete使用起來有些問題。但ajax的出現爲我們提供了一種解決的方式,ajax使用xmlhttprequest進行操作時,在發送請求之前,可以通過設置request type的方式來完成對請求方法的設定。

諸位如果作爲servlet開發的人可以嘗試一下直接在servlet中實現doPut、doDelete等方法,並在客戶端使用ajax對相同的URI使用不同的方法進行請求,相信大家可以玩得愉快:)

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