1. 程式人生 > >HTTP:GET POST PUT DELETE HEAD OPTIONS

HTTP:GET POST PUT DELETE HEAD OPTIONS

​​​​​​HTTP協議定義了6種與伺服器進行資料互動的方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL的全稱是Uniform Resource Location,即統一資源定位符,我們可以理解為:一個URL地址用於描述一個網路上的資源,而HTTP中的GET,POST,PUT,DELETE分別對應著對這個資源的查,改,增,刪4個操作。另外2種方法則為擴充套件型協議請求方法HEAD、OPTIONS。

GET

根據HTTP規範,GET用於資訊獲取,而且應該是安全的和冪等的。

這裡安全的含義僅指不修改資訊,即該操作用於獲取資訊但不更新資訊。可以理解為GET請求不應產生副作用,而是僅獲取資源資訊,類似資料庫查詢,不會增刪改資料,不會影響資源的狀態。冪等是指對同一URL的多個請求應該返回同樣的結果。

GET的HTTP請求中,只包含請求頭,不會包含請求資料,攜帶的資料只能作為請求資源的引數新增到URL中,英文和數字直接傳送,中文等其他字元通過BASE64加密傳送,空格轉換為+,由於瀏覽器(不是HTTP協議)對於URL長度可能存在限制,所以傳送資料的長度也會受限,由於其資料(英文和數字)通過明文傳送,所以資料也不安全。

通過GET方式傳送一個請求來取得伺服器上的某一資源時,該資源會通過一組HTTP響應頭和響應資料(如HTML文字、圖片、視訊等)返回給客戶端。

HEAD

HEAD和GET本質上極為相似,區別在於HEAD的HTTP響應中不包含響應資料,僅包含響應頭。

可以用來判斷某個資源是否存在,而不需要取得資料的場景。 

POST

根據HTTP規範,POST表示可能修改變伺服器上的資源的請求。理論上POST上傳的資料大小沒有限制,可傳大量資料(IIS5為100KB,Apache可以通過修改伺服器和PHP配置上傳資料長度和上傳檔案大小限制)。

按照HTTP規範,更新資源應使用POST而不是GET,儘管幾乎所有向伺服器提交資料的操作都可以使用POST完成。但是這並沒有嚴格遵守HTTP規範。

PUT

本質上PUT和POST極為相似,區別在於PUT通常指定了資源的存放位置,而POST提交的資料由服務端決定存放位置。

HTML表單不支援,使用較少。 

DELETE

刪除某一個資源,使用極少(amazon的S3雲服務裡面用這個方法來刪除資源)。 

OPTIONS

用於獲取當前URL所支援的HTTP請求方法列表。當請求成功時,會在返回的HTTP響應頭中包含一個名為“Allow”的欄位,值形如“GET, POST”。極少使用。

GET示例

GET請求

GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&;PWD=string⩔derConfirmation=string HTTP/1.1
Host: api.efxnow.com

GET響應

HTTP/1.1 200 OK 
Content-Type: text/xml; charset=utf-8 
Content-Length: length<?xml version="1.0" encoding="utf-8"?> 

響應資料

POST示例

POST請求

POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1 
Host: api.efxnow.com 
Content-Type: application/x-www-form-urlencoded 
Content-Length: lengthUserID=string&;PWD=string⩔derConfirmation=string

POST響應

HTTP/1.1 200 OK 
Content-Type: text/xml; charset=utf-8 
Content-Length: length<?xml version="1.0" encoding="utf-8"?> 

響應資料

狀態碼

100 Continue:初始的請求已經接受,客戶應當繼續傳送請求的其餘部分 

101 SwitchingProtocols:伺服器將遵從客戶的請求轉換到另外一種協議 

200 OK:一切正常,對GET和POST請求的應答文件跟在後面 

201 Created:伺服器已經建立了文件,Location頭給出了它的URL

202 Accepted:已經接受請求,但處理尚未完成

203 Non-AuthoritativeInformation:文件已經正常返回,但某些響應頭可能不正確,因為使用的是文件的拷貝 

204 NoContent:沒有新的內容,瀏覽器應該繼續顯示原來的文件。使用者定期重新整理頁面而Servlet可以確定使用者文件足夠新時,這個狀態程式碼十分有用

205 ResetContent:沒有新的內容,但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容 

206 PartialContent:客戶傳送了一個帶有Range頭的GET請求,伺服器完成了它 

300 MultipleChoices:客戶請求的文件可以在多個位置找到,這些位置已經在返回的文件內列出。如果伺服器要提出優先選擇,則應該在Location應答頭指明

301 Moved Permanently:客戶請求的文件在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL

302 Found:類似於301,但新的URL應該被視為臨時性的替代,而不是永久性的

303 SeeOther:類似於301/302,不同之處在於,如果原來的請求是POST,Location頭指定的重定向目標文件應該通過GET提取 

304 Not Modified客戶端有快取資源併發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文件)時,伺服器返回客戶304表示原來快取資源可以繼續使用

305 UseProxy:客戶請求的文件應該通過Location頭所指明的代理伺服器提取 

307 Temporary Redirect:和302(Found)相同。許多瀏覽器會錯誤地響應302應答進行重定向,即使原來的請求是 POST,即使它實際上只能在POST請求的應答是303時才能重定向。由於這個原因,HTTP1.1新增了307,以便更加清除地區分幾個狀態程式碼: 當出現303應答時,瀏覽器可以跟隨重定向的GET和POST請求;如果是307應答,則瀏覽器只能跟隨對GET請求的重定向

400 Bad Request:請求出現語法錯誤

401 Unauthorized:客戶試圖未經授權訪問受密碼保護的頁面。應答中會包含一個WWW-Authenticate頭,瀏覽器據此顯示使用者名稱字/密碼對話方塊,然後在填寫合適的Authorization頭後再次發出請求

403 Forbidden:資源不可用

404 Not Found:無法找到指定位置的資源 

405 MethodNotAllowed:請求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)對指定的資源不適用

406 NotAcceptable:指定的資源已經找到,但它的MIME型別和客戶在Accpet頭中所指定的不相容

407 ProxyAuthenticationRequired:類似於401,表示客戶必須先經過代理伺服器的授權

408 RequestTimeout:在伺服器許可的等待時間內,客戶一直沒有發出任何請求。客戶可以在以後重複同一請求。 

409 Conflict:通常和PUT請求有關。由於請求和資源的當前狀態相沖突,因此請求不能成功

410 Gone:所請求的文件已經不再可用,而且伺服器不知道應該重定向到哪一個地址。它和404的不同在於,返回407表示文件永久地離開了指定的位置,而404表示由於未知的原因文件不可用

411 LengthRequired:伺服器不能處理請求,除非客戶傳送一個Content-Length頭

412 PreconditionFailed:請求頭中指定的一些前提條件失敗

413 RequestEntityTooLarge:目標文件的大小超過伺服器當前願意處理的大小。如果伺服器認為自己能夠稍後再處理該請求,則應該提供一個Retry-After頭

414 RequestURITooLong:URI太長 

416 RequestedRangeNotSatisfiable:伺服器不能滿足客戶在請求中指定的Range頭 

500 Internal Server Error:伺服器遇到了意料不到的情況,不能完成客戶的請求 

501 Not Implemented:伺服器不支援實現請求所需要的功能。例如,客戶發出了一個伺服器不支援的PUT請求 

502 BadGateway:伺服器作為閘道器或者代理時,為了完成請求訪問下一個伺服器,但該伺服器返回了非法的應答 

503 ServiceUnavailable:伺服器由於維護或者負載過重未能應答。例如,Servlet可能在資料庫連線池已滿的情況下返回503,伺服器返回503時可以提供一個Retry-After頭 

504 GatewayTimeout:由作為代理或閘道器的伺服器使用,表示不能及時地從遠端伺服器獲得應答 

505 HTTPVersionNotSupported:伺服器不支援請求中所指明的HTTP版本。