본문 바로가기
HTTP

HTTP 요청 메서드

by SeanK 2021. 11. 18.

 

 

어느날 유튭에서 누가 그랬던것 같다. 

 

진짜 뛰어난 웹 개발자는 코딩이 뛰어나기보다 네트워크에 대한 이해도가 높은사람이라고.

 

오늘은 HTTP에 대한 공부를 해보았는데, 역시 만만치가 않다.

 

영어 원서가 주를 이루다 보니 시간이 꽤 걸린듯 하다. 

 

학생 때 영어공부 많이 해두길 다행이다...

 

HTTP 요청 메서드

 

HTTP 공식 자료에 따른 정의는 아래와 같다. 

 

The request method token is the primary source of request semantics;
   it indicates the purpose for which the client has made this request
   and what is expected by the client as a successful result.

 

요청 메소드는 어떤 클라이언트가 요청을 보냈는지

 

그리고 클라이언트가 실행결과 어떤 결과물을 기대하고 있는지 등을 알려주는 요청문과 같다. 

 

즉, HTTP를 통해 어떤 작업을 요청 할 때 사용하는 표준화된 키워드라고 볼 수 있다. 

 

아래 테이블에 정리된 메소드들은 HTTP에서 주로 사용되는 키워드들의 모음이다. 

 

 

 +---------+-------------------------------------------------+-------+
   | Method  | Description                                     | Sec.  |
   +---------+-------------------------------------------------+-------+
   | GET     | Transfer a current representation of the target | 4.3.1 |
   |         | resource.                                       |       |
   | HEAD    | Same as GET, but only transfer the status line  | 4.3.2 |
   |         | and header section.                             |       |
   | POST    | Perform resource-specific processing on the     | 4.3.3 |
   |         | request payload.                                |       |
   | PUT     | Replace all current representations of the      | 4.3.4 |
   |         | target resource with the request payload.       |       |
   | DELETE  | Remove all current representations of the       | 4.3.5 |
   |         | target resource.                                |       |
   | CONNECT | Establish a tunnel to the server identified by  | 4.3.6 |
   |         | the target resource.                            |       |
   | OPTIONS | Describe the communication options for the      | 4.3.7 |
   |         | target resource.                                |       |
   | TRACE   | Perform a message loop-back test along the path | 4.3.8 |
   |         | to the target resource.                         |       |
   +---------+-------------------------------------------------+-------+

 

관습적으로 메소드는 US-ASCII 대문자로 표시한다. 

 

일반적으로 대부분의 서버들은 GET 방식과 HEAD 메소드를 반스시 지원해야 한다. 

 

나머지 메소드들은 Optional이기 때문에 지원하지 않을 수도 있다. 

 

만약 어떤 요청을 보냈을 때 서버의 응답이 500으로 시작한다면, 해당 메소드를 서버가 지원하지

 

않을 경우도 생각해 볼 수 있다.

 

 

Safe Methods

 

HTTP 문서에서 상당히 비중있게 다루는 부분이 바로 메소드의 Safety이다. 

 

아시다시피 클라이언트가 서버에 어떤 작업을 요청할 수 있다는 것은, 

 

편리한 일임과 동시에 꾀나 위험한 일이기도 하다.

 

만약 클라이언트가 "모든 파일을 삭제해 주세요"라고 서버에 보내버리고, 

 

서버가 곧이 곧대로 그것을 받아들여 모든 파일을 삭제한다면 대참사가 벌어지기 때문이다. 

 

따라서 HTTP 메소드들은 안전하게 사용해도 되는 메소드들과 위험한 메소드들을 구분함으로써

 

안전한 개발을 용이하게 하도록 하고 있다. 

 

   Request methods are considered "safe" if their defined semantics are
   essentially read-only; i.e., the client does not request, and does
   not expect, any state change on the origin server as a result of
   applying a safe method to a target resource.  Likewise, reasonable
   use of a safe method is not expected to cause any harm, loss of
   property, or unusual burden on the origin server.

- 안전한 메소드는 실행 결과 서버에 어떠한 변형이 일어나지 않는 것을 말한다.

  안전한 메소드를 올바르게 사용했을 때는 서버에 어떠한 해를 끼치지 않는다. 

 

이 때 등장하는 개념이 바로 "멱등성"이다. 

멱등성에 관한 내용은 상당히 길어질 듯 하니, 다음 포스팅에서 다루도록 하겠다. 

 

여튼, 안전한 메소드들은 멱등성을 가지며

 

GET / HEAD / OPTIONS / TRACE 메소드가 이에 해당한다. 

 

그렇다고 멱등성을 가진 모든 메소드들이 안전하다고는 할 수 없다. 

 

PUT / DELETE는 안전하진 않지만 멱등성을 가진다. 

 

 

'HTTP' 카테고리의 다른 글

[Socket.io] Socket.io란 무엇인가?  (0) 2022.03.05
HTTP MIME  (0) 2021.11.18
HTTP 상태 코드  (0) 2021.11.18
HTTP PUT과 PATCH 메소드의 차이  (0) 2021.11.18
HTTP 메소드의 멱등성  (0) 2021.11.18