java開發HTTP協議:HTTP協議的方法詳解

如圖所示,HTTP請求數據包第一行第一個單詞具有重要意義:
屏幕快照 2020-05-05 上午10.26.35.png
第一行第一個單詞是"GET",客戶端會根據對服務器的請求來指定該單詞,因此第一行第一個單詞被稱爲HTTP協議的方法。客戶端發送給服務器的請求數據包,第一個單詞永遠作爲該請求的“方法”。通常情況下,客戶端通知服務器採取某種操作並將操作的結果返回給它都被稱爲命令,只有在HTTP協議下被稱爲方法,因此HTTP協議的方法與其他協議所說的命令並沒有本質區別。之所以使用“方法”是因爲HTTP協議爲了實現其通用性和靈活性,借鑑了面向對象編程的思維。有編程經驗的朋友都知道,某個類導出的接口稱爲該類的方法,HTTP協議把數據包看做一個類的實例,因此實例裏面封裝了各種屬性,也就是前面章節描述的header,該實例發送給服務器後導致給定的方法或接口被調用,因此HTTP借用面向對象編程的思維來設計其數據包,這也是HTTP協議爲何如此通用和靈活的重要原因。

所有方法對應的單詞都必須大寫,在HTTP協議中主要有三種方法。第一種就是現在看到的GET,它要求服務器將URI指定的資源返回給客戶端,URI就是跟在方法對應單詞後面的字符串,以上面圖片爲例就是"/pingjs/ext2020/…"這一句。GET方法在HTTP協議中使用最爲廣泛,在我們通過瀏覽器打開特定網頁時,瀏覽器作爲客戶端向服務器發送GET方法數據包從而獲得對應網頁的HTML數據。

當服務器接收到GET數據包後,它檢測對應URI是否有效,有效的話就根據URI的指引將數據返回給客戶端。需要注意的是服務器對GET請求的執行受到header部分信息的影響,如果header部分包含例如If-Modified-Sinced,If-Match等字段,那麼服務器就會檢驗當前條件是否滿足字段的要求以便決定是否將數據返回給客戶端。這種受到header自動影響的GET請求也稱爲條件化GET請求。如果請求的文件很大,那麼客戶端會在GET請求中包含一個Range字段用於告訴客戶端返回文件指定部分。

第二個常用方法叫HEAD,它與GET類似,但是要求服務器不要返回請求文件的所有數據而是把文件頭部數據返回即可。客戶端使用該方法目的往往不在於獲取文件數據,而在於確認文件是否存在,或是確認文件的狀態,大小等相關信息。

第三種常用方法叫POST,它的作用是讓客戶端將數據提交給服務器。我們往往會通過網頁填寫表格,例如在登陸時填寫用戶名和密碼,或者通過網頁登記個人信息時,你會在網頁上填寫姓名,性別等相關數據,填寫完後你點擊“登陸”或是“提交”,那麼相關信息就會給瀏覽器以POST的方法提交給服務器進行認證或存儲,例如像下面表格的信息,當在方框中填寫完點擊“登陸”後,所填寫的信息就會被POST到服務器上。

屏幕快照 2020-05-05 上午10.55.10.png

接下來的幾種方法比較少用但也值得我們掌握。第四種方法叫OPTIONS,它被客戶端用來向服務器詢問對方所支持的溝通方式。如果在OPTIONS方法後面跟着一個URI,那麼客戶端的目的不是請求服務器返回指定文件而是像服務器詢問獲取文件信息的途徑,此時服務器有可能返回一個新的主機IP讓客戶端去重新請求,如果後面跟着“*”符號,這意味着客戶端在向服務器查詢服務器當前的相關信息,服務器會返回詳細信息告訴客戶端如何獲取存儲在服務器上的資源。

第五種方法叫PUT。這個方法與POST很像,它也是客戶端用於向服務器傳遞信息,兩者的區別在於POST會要求服務器的特定程序來處理提交的信息,例如POST數據包中常常指定存儲在服務器上的一個php文件,當數據抵達服務器後,服務器會執行指定的php文件中的代碼,然後將受到的信息交給php代碼去做處理,而PUT則要求服務器直接將接收的數據存儲在指定位置,我們也可以認爲PUT與GET相對應,GET是獲取服務器的指定文件,PUT是將文件提交給服務器。通常情況下,允許客戶端直接將文件存儲在服務器上會造成嚴重的安全隱患,因此PUT方法很少使用,更多的是使用POST方法,因爲這樣服務器能運行特定程序對客戶端提交的信息進行審查從而防止惡意信息被傳遞到服務器上。

第六種方法叫DELETE,它對應客戶端要求服務器刪除指定文件,由於該方法涉及到服務器系統的安全,因此很少被允許使用。第七種方法叫TRACE,它允許客戶端返回客戶端以前發給服務器的請求信息,該方法通常用於服務器的調試。除了這幾種主要方法外,HTTP1.1還保留了CONNECT方法用於以後使用。

我們可以看到客戶端使用的方法會對服務器的安全產生重要影響。因此所有方法可以分爲兩大類,第一類叫“安全”方法,這種請求使得服務器的管理員不會感覺服務器的運行受到威脅,這類方法對應GET, OPTIONS, TRACE,第二種叫“危險”方法,任何讓客戶端將數據提交給服務器的方法都屬於此類,也就是POST,PUT,DELETE.

下一節我們將使用java開發本節提到的若干HTTP方法。

更詳細的講解和代碼調試演示過程,請點擊鏈接

更多技術信息,包括操作系統,編譯器,面試算法,機器學習,人工智能,請關照我的公衆號:
這裏寫圖片描述

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