Http协议的Delete和Put方法是做什么的?怎么用?
一般來(lái)說(shuō),Web服務(wù)器默認(rèn)的只支持Post和Get這兩種“只讀”的請(qǐng)求方法。但是隨著Ajax XMLHttpRequest 和 REST風(fēng)格應(yīng)用的深入,我們發(fā)現(xiàn)Http 1.1協(xié)議還支持如下請(qǐng)求方法(Request Method):
-
OPTIONS
-
HEAD
-
DELETE
-
PUT
-
TRACE
-
CONNECT
Get是最常用的,就是向Web Server發(fā)請(qǐng)求“獲取”資源;那么Post就是向Web Server“郵寄”一些封裝的數(shù)據(jù)包獲取資源,這兩者方法嚴(yán)格的說(shuō)都是“索取”行為。
顧名思義,Delete方法就是通過(guò)http請(qǐng)求刪除指定的URL上的資源啦,Delete請(qǐng)求一般會(huì)返回3種狀態(tài)碼:
- 200 (OK) - 刪除成功,同時(shí)返回已經(jīng)刪除的資源
- 202 (Accepted) - 刪除請(qǐng)求已經(jīng)接受,但沒(méi)有被立即執(zhí)行(資源也許已經(jīng)被轉(zhuǎn)移到了待刪除區(qū)域)
- 204 (No Content) - 刪除請(qǐng)求已經(jīng)被執(zhí)行,但是沒(méi)有返回資源(也許是請(qǐng)求刪除不存在的資源造成的)
Put方法就不多廢話了,就是往Web Server上直接扔資源(上傳資源)嘛,不過(guò)實(shí)際操作起來(lái)可能會(huì)讓諸位夠暈一壺,E文定義如下:
The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI. If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request. If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be given that reflects the nature of the problem. The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not understand or implement and MUST return a 501 (Not Implemented) response in such cases.
If the request passes through a cache and the Request-URI identifies one or more currently cached entities, those entries SHOULD be treated as stale. Responses to this method are not cacheable.
The fundamental difference between the POST and PUT requests is reflected in the different meaning of the Request-URI. The URI in a POST request identifies the resource that will handle the enclosed entity. That resource might be a data-accepting process, a gateway to some other protocol, or a separate entity that accepts annotations. In contrast, the URI in a PUT request identifies the entity enclosed with the request -- the user agent knows what URI is intended and the server MUST NOT attempt to apply the request to some other resource. If the server desires that the request be applied to a different URI,
it MUST send a 301 (Moved Permanently) response; the user agent MAY then make its own decision regarding whether or not to redirect the request.
A single resource MAY be identified by many different URIs. For example, an article might have a URI for identifying "the current version" which is separate from the URI identifying each particular version. In this case, a PUT request on a general URI might result in several other URIs being defined by the origin server.
HTTP/1.1 does not define how a PUT method affects the state of an origin server.
PUT requests MUST obey the message transmission requirements set out in section 8.2.
Unless otherwise specified for a particular entity-header, the entity-headers in the PUT request SHOULD be applied to the resource created or modified by the PUT.
上面說(shuō)的都是虛的,實(shí)戰(zhàn)才是硬道理!
- 首先,我們要讓W(xué)eb Server支持Delete 和 Put請(qǐng)求方法,以大家熟悉的Tomcat為例:
在Tomcat的web.xml?文件中配置 org.apache.catalina.servlets.DefaultServlet 的初始化參數(shù)
[xhtml]?view plain?copy
readonly參數(shù)默認(rèn)是true,即不允許delete和put操作,所以默認(rèn)的通過(guò)XMLHttpRequest對(duì)象的put或者delete方法訪問(wèn)就會(huì)報(bào)告 http 403 forbidden 錯(cuò)誤。
- 接下來(lái),從客戶端通過(guò) Ajax XMLHTTPRequest 發(fā)起 DELETE/PUT 請(qǐng)求:
[javascript]?view plain?copy - function?getXMLHTTPRequest(){??
- ????if?(XMLHttpRequest)????{??
- ????????return?new?XMLHttpRequest();??
- ????}?else?{??
- ????????try{??
- ????????????return?new?ActiveXObject('Msxml2.XMLHTTP');??
- ????????}catch(e){??
- ????????????return?new?ActiveXObject('Microsoft.XMLHTTP');??
- ????????}??
- ????}??
- }??
- var?req?=?getXMLHTTPRequest();??
- req.open('DELETE','http://localhost/test.jsp',false);??
- req.send(null);??
- document.write(req.responseText);??
- WebDAV也需要使用到這2種Http請(qǐng)求方法。
總結(jié)
以上是生活随笔為你收集整理的Http协议的Delete和Put方法是做什么的?怎么用?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 幼儿断手指的哥闯红灯跑赢12分钟:成功救
- 下一篇: Keychron 推出新款 K9 Pro