HTTP(HyperText Transfer Protocol)의 Request packet에 포함되는 Method 에 대한 정리입니다.
HTTP/1.1는 RFC 2616 in 1999 에 기재되어 있습니다. (하지만, Wiki가 보기 더 좋습니다.)
HTTP/2는 RFC 7540 in 5, 2015 에 기재되어 있습니다. (Wiki 짱)
Method
Method란 Request-URI에 의해 식별된 자원에게 수행할 작업을 명시합니다.
(The Method token indicates the method to be performed on the resource identified by the Request-URI.)
아래 예시에서 제일 앞에 있는 GET이 Method에 해당합니다. 그 뒤는 Request-URI와 HTTP 버전, 요청하는 대상
HTTP/1.1 Method
HTTP/1.1에 정의된 Method 입니다.
GET | Request-URI에 해당하는 resource 전송을 요청한다. |
POST | Request-URI에 해당하는 resource으로 첨부된(종속으로 동봉된) entity를 서버에서 처리하도록 요청한다. 서버는 Request Packet에 포함된 정보를 가지고 해당 resource에서 처리를 한 후 그 결과를 돌려보낸다. |
HEAD | 서버가 Response Packet의 body를 제외하는 것을 빼고는 GET과 동일하다. 이는 Response시 전체가 아닌 meta-information만 얻고자 할 때 사용할 수 있다. |
OPTIONS | 명시된 Request-URI 에 대해 서버에서 지원하는 Method들을 요청한다. |
TRACE | 경로 추적. Request message에 대한 loop-back을 요청한다. |
PUT | Request-URI에 동봉된 entity를 저장하도록 요청한다. |
DELETE | PUT의 반대. Request-URI에 해당하는 resource를 서버에서 삭제하도록 요청한다. |
CONNECT | HTTPS. SSL 터널링과 같이 Proxy 연결을 요청할 때 사용한다. HTTP CONNECT tunneling 참고 |
WebDAV 확장 Method
WebDAV(Web Distributed Authoring and Versioning, 웹 분산 저작 및 버전 관리)는 HTTP의 확장으로 clients가 원격으로 웹 컨텐츠 작성을 할 수 있도록 도와줍니다.(영문 Wiki, RFC 2518, RFC 4918)
PROPFIND | 웹으로부터 XML로 저장된 properties를 가져오는데 사용한다. |
PROPPATCH | 여러 properties를 바꾸거나 지울 때 사용한다. |
MKCOL | Collections을 만들 때 사용한다.(A.K.A a Directory!!!!) |
COPY | Resource 복사 |
MOVE | Resource 이동 |
LOCK | Resource Lock |
UNLOCK | Lock 해제 |
PROPFIND : 웹으로부터 XML로 저장된 properties를 가져오는데 사용한다.
>>Request
PROPFIND /file HTTP/1.1
Host: www.example.com
Content-type: application/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
<D:prop xmlns:R="http://ns.example.com/boxschema/">
<R:bigbox/>
<R:author/>
<R:DingALing/>
<R:Random/>
</D:prop>
</D:propfind>
>>Response
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D="DAV:">
<D:response xmlns:R="http://ns.example.com/boxschema/">
<D:href>http://www.example.com/file</D:href>
<D:propstat>
<D:prop>
<R:bigbox>
<R:BoxType>Box type A</R:BoxType>
</R:bigbox>
<R:author>
<R:Name>J.J. Johnson</R:Name>
</R:author>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
<D:propstat>
<D:prop><R:DingALing/><R:Random/></D:prop>
<D:status>HTTP/1.1 403 Forbidden</D:status>
<D:responsedescription> The user does not have access to the
DingALing property.
</D:responsedescription>
</D:propstat>
</D:response>
<D:responsedescription> There has been an access violation error.
</D:responsedescription>
</D:multistatus>
PROPPATCH : 여러 properties를 바꾸거나 지울 때 사용한다.
>>Request
PROPPATCH /bar.html HTTP/1.1
Host: www.example.com
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:propertyupdate xmlns:D="DAV:"
xmlns:Z="http://ns.example.com/standards/z39.50/">
<D:set>
<D:prop>
<Z:Authors>
<Z:Author>Jim Whitehead</Z:Author>
<Z:Author>Roy Fielding</Z:Author>
</Z:Authors>
</D:prop>
</D:set>
<D:remove>
<D:prop><Z:Copyright-Owner/></D:prop>
</D:remove>
</D:propertyupdate>
>>Response
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D="DAV:"
xmlns:Z="http://ns.example.com/standards/z39.50/">
<D:response>
<D:href>http://www.example.com/bar.html</D:href>
<D:propstat>
<D:prop><Z:Authors/></D:prop>
<D:status>HTTP/1.1 424 Failed Dependency</D:status>
</D:propstat>
<D:propstat>
<D:prop><Z:Copyright-Owner/></D:prop>
<D:status>HTTP/1.1 409 Conflict</D:status>
</D:propstat>
<D:responsedescription> Copyright Owner cannot be deleted or
altered.</D:responsedescription>
</D:response>
</D:multistatus>
MKCOL : Collections을 만들 때 사용한다.(A.K.A a Directory!!!!)
>>Request
MKCOL /webdisc/xfiles/ HTTP/1.1
Host: www.example.com
>>Response
HTTP/1.1 201 Created
COPY : Resource 복사
>>Request
COPY /container/ HTTP/1.1
Host: www.example.com
Destination: http://www.example.com/othercontainer/
Depth: infinity
>>Response
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<d:multistatus xmlns:d="DAV:">
<d:response>
<d:href>http://www.example.com/othercontainer/R2/</d:href>
<d:status>HTTP/1.1 423 Locked</d:status>
<d:error><d:lock-token-submitted/></d:error>
</d:response>
</d:multistatus>
MOVE : Resource 이동
>>Request
MOVE /~fielding/index.html HTTP/1.1
Host: www.example.com
Destination: http://www.example/users/f/fielding/index.html
>>Response
HTTP/1.1 201 Created
Location: http://www.example.com/users/f/fielding/index.html
LOCK : Resource Lock
>>Request
LOCK /workspace/webdav/proposal.doc HTTP/1.1
Host: example.com
Timeout: Infinite, Second-4100000000
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx
Authorization: Digest username="ejw",
realm="ejw@example.com", nonce="...",
uri="/workspace/webdav/proposal.doc",
response="...", opaque="..."
<?xml version="1.0" encoding="utf-8" ?>
<D:lockinfo xmlns:D='DAV:'>
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
<D:owner>
<D:href>http://example.org/~ejw/contact.html</D:href>
</D:owner>
</D:lockinfo>
>>Response
HTTP/1.1 200 OK
Lock-Token: <urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4>
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:prop xmlns:D="DAV:">
<D:lockdiscovery>
<D:activelock>
<D:locktype><D:write/></D:locktype>
<D:lockscope><D:exclusive/></D:lockscope>
<D:depth>infinity</D:depth>
<D:owner>
<D:href>http://example.org/~ejw/contact.html</D:href>
</D:owner>
<D:timeout>Second-604800</D:timeout>
<D:locktoken>
<D:href
>urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4</D:href>
</D:locktoken>
<D:lockroot>
<D:href
>http://example.com/workspace/webdav/proposal.doc</D:href>
</D:lockroot>
</D:activelock>
</D:lockdiscovery>
</D:prop>
UNLOCK : Resource 해제
>>Request
UNLOCK /workspace/webdav/info.doc HTTP/1.1
Host: example.com
Lock-Token: <urn:uuid:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7>
Authorization: Digest username="ejw"
realm="ejw@example.com", nonce="...",
uri="/workspace/webdav/proposal.doc",
response="...", opaque="..."
>>Response
HTTP/1.1 204 No Content