# HTTP 메소드

## 의미

* HTTP에서 클라이언트가 서버에게 요청하는 명령어(요청 종류)
* HTTP/1.1에서 명세된 Method에는 GET, HEAD, POST, DELETE, PUT, TRACE, OPTIONS 가 있으며, 이 외에도 클라이언트-서버를 개발할 때 커스텀한 확장 메서드를 만들어서 사용할 수 있음
* HTTP Method 마다 필요로하는 URL(리소스)와 요청 헤더가 있을 수 있음

## GET

* 서버에게 리소스를 달라고 요청하기 위해 쓰임
* 가장 흔히 쓰는 메서드
* URL에 질의(Query)를 사용하여 구체적인 요청을 할 수 있음
* 웹 브라우저 주소창에 URL을 입력하는 것이 해당 URL로 GET요청을 보내는 것임

## HEAD

* GET처럼 행동하지만, 응답으로 헤더만을 돌려주고 본문은 반환되지 않음
* HEAD는 GET으로 얻는 부분과 정확히 일치해야 함
* 사용 이유
  * 리소스를 가져오지 않고도 타입 등 리소스의 정보를 알아낼 수 있음
  * 상태코드를 통해 개체의 존재유무 확인
  * 헤더를 확인하여 리소스가 변경됐는지 확인

## PUT

* 서버에 문서를 씀(write)
* 요청의 내용대로 새 문서를 만들거나 기존 문서를 교체함
* 서버의 콘텐츠를 변경하기 때문에 로그인 등 보안 요소가 동반 되기도 함

## POST

* 서버에 입력 데이터를 전송하기 위해 설계됨
* 본문의 유형은 Content-Type 헤더로 나타내고, Content-Length 헤더로 데이터의 길이를 나타냄
* 전송할 데이터는 HTTP Request Message의 본문(entity)에 담아서 보냄
* HTML의 폼(form)을 지원하기 위해 사용됨
* POST는 단순히 전송, PUT은 리소스에 데이터를 입력하기 위해 사용

## DELETE

* 지정한 리소스를 삭제할 것을 요청함. 단, 삭제가 보장되지 않음(클라리언트에 삭제됐다는 응답을 보내줄 수 있지만, 서버에서 실제 데이터를 지우지 않을 수 있음. 서버 정책에 따름)
* 서버가 이 요청을 무시할 수 있으며, HTTP 명세에는 서버가 클라이언트에게 알리지 않고 요청을 무시하는 것이 허용 됨

## TRACE

* 응답 쪽 서버에서 요청의 내용이 어떻게 보이는지 알려달라고 요청하는것
* 목적지 서버에서 루프백 진단을 시도하여, 메시지가 어떻게 가고 오는지 확인할 수 있음

## OPTIONS

* 서버에게 특정 리소스에 대해 어떤 메서드가 지원되는지 물어볼 수 있음

## 확장 메서드

* HTTP/1.1 명세에 정의되지 않은 메서드로, 필요에 따라 확장하여 설계하는 메서드
* 애플리케이션과 서버를 만들 때 구현할 수 있음

## 참고문헌

* [HTTP 완벽가이드](http://www.yes24.com/Product/Goods/15381085)
* [W3schools](https://www.w3schools.com/tags/ref_httpmethods.asp)
* [MDN Web docs](https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/GET)
