HTTP請求的8中方法淺析

來吧,之前想要總結這個問題來着,因爲我個人也覺着挺重要的,但是總是被其他的內容給耽擱,遇到閉包了,我會想着先弄懂閉包吧,遇到DOM事件的問題了,會想着先弄明白DOM事件吧,所以 HTTP請求的方法就總是擱置了。好吧,前幾天阿里面試的時候,真的就問到了這個問題,而我除了知道get和post之外,別的並不瞭解額。所以,現在趕緊的總結一下,以備後續的面試。

好,正文開始:

HTTP8種請求方法概述

HTTP協議中共定義了八種方法或者叫“動作”get,post,put, options,head,delete,trace,connect,來表明對Request-URI指定的資源的不同操作方式,具體介紹如下:

  • OPTIONS:返回服務器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務器發送’*’的請求來測試服務器的功能性。
  • HEAD:向服務器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應消息頭中的元信息。
  • GET:向特定的資源發出請求。
  • POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的創建和/或已有資源的修改。
  • PUT:用於向服務器發送請求,如果URI不存在,則要求服務器根據請求創建資源,如果存在,服務器就接受請求內容,並修改URI的原始版本
  • DELETE:請求服務器刪除Request-URI所標識的資源。
  • TRACE:回顯服務器收到的請求,主要用於測試或診斷。
  • CONNECT:HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。

上面是從博客中摘得。

上述方法中最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的查,改,增,刪4個操作。上述內容講的有些粗略,下面具體的就get、post和options來進行詳細的介紹:

Get請求和post請求

get請求

  • 一般來講get請求是用來信息獲取的,它只會獲取資源,並不會對資源進行更改,不會影響資源的狀態。
  • get請求一般是以查詢字符串的形式附在URL裏,如果數據是英文字母/數字,原樣發送,如果是空格,轉換爲+,如果是中文/其他字符,則直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX爲該符號以16進製表示的ASCII。因此,存在一定的安全隱患
  • get提交的數據有大小限制,因爲GET是通過URL提交數據,那麼GET可提交的數據量就跟URL的長度有直接關係了。而實際上,URL不存在參數上限的問題,HTTP協議規範沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操作系統的支持。(這一點相信很多人都一直以爲是2k的限制,其實並不是啊)

post請求

  • 根據HTTP規範,POST表示可能修改變服務器上的資源的請求。
  • Post是將表單中的數據放在form的數據體中,表單中的參數值對是通過request body發送給服務器,Post的所有操作對用戶來說都是不可見的。
  • 理論上POST沒有限制,可傳較大量的數據

二者區別

這是一個面試的時候經常會被問到的一個問題,區別如下(個人認爲):
1. get提交,數據放在url裏面,所以數據是在瀏覽器可見的,不安全,而post提交是放在請求頭中,用戶不可見,所以比較安全;
2. 請求數據的大小,get有一定限制,而post可發送的數據沒有限制
3. get一般用來請求數據,不會對數據進行更改,而post用於發送數據,會對數據進行修改
post請求
這裏寫圖片描述

w3school上總結的一個表
這裏寫圖片描述

options請求

官方定義:

options方法用於請求獲得由request-URI標識的資源在請求/響應的通信過程中可以使用的功能選項。通過這個方法,客戶端可以在採取具體資源請求之前,決定對該資源採取何種必要措施,或瞭解服務器的性能。
主要用途:
1. 獲取服務器支持的HTTP請求方法;
2. 用來檢車服務器的性能,例如,進行AJAX跨域請求時的預檢,需要向另一個域名的資源發送一個HTTP options 請求頭,用以判斷實際發送的請求是否安全。

這裏寫圖片描述

get,put,post,delete

  • get請求會向數據庫發索取數據的請求,從而來獲取信息,該請求就像數據庫的select操作一樣,只是用來查詢一下數據,不會修改、增加數據,不會影響資源的內容,即該請求不會產生副作用。無論進行多少次操作,結果都是一樣的。
  • put 是向服務器端發送數據的,從而改變信息,該請求就像數據庫的update操作一樣,用來修改數據的內容,但是不會增加數據的種類等,也就是說無論進行多少次PUT操作,其結果並沒有不同。
  • post同PUT請求類似,都是向服務器端發送數據的,但是該請求會改變數據的種類等資源,就像數據庫的insert操作一樣,會創建新的內容。幾乎目前所有的提交操作都是用POST請求的。
  • delete就是用來刪除某一個資源的,該請求就像數據庫的delete操作。

參考博文:
淺談HTTP中Get與Post的區別
HTTP 方法:GET 對比 POST

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