HTML Form 에서 GET/POST 만 지원하는 이유
초기 HTML5 draft에는 포함되어 있었고 Firefox의 베타 버전에서는 잠시 구현하기도 했었다.
W3C는 이 문제를 bug report 10671에서 논의를 했는데
- Mike Amundsen 이라는 사람의 관점. ``` 리소스를 수정하기 위해 PUT과 DELETE를 실행하는 건 모던 브라우저의 XmlHttpRequest 객체를 사용하면 간단한데, 스크립트를 사용하지 않는 상황에선 쉽지 않다.
이 패턴은 많은 일반적인 웹 프레임웍/라이브러리에서 기본으로 구현하고 있다.
- Tom Wardrop 의 관점
HTML은 HTTP와 떼려야 뗄 수 없는 관계다. HTML은 인간을 위한 HTTP 인터페이스다.
따라서 왜 HTTP에서 필요한 메소드를 모두 제공하지 않는 것인가에 대해 자동으로 의문을 가질 수 밖에 없다.
기계는 PUT과 DELETE를 할 수 있으면서 인간은 왜 안 되는가?
HTML이 시맨틱한 마크 업을 보장하는 데 많은 시간을 할애하면서, 시맨틱한 HTTP 요청을 보장하기 위한 노력을 하지 않았다는 것은 모순이다.
결국 이 버그는 (HTML editor인) Ian Hickson에 의해 고치지 않는 것으로 결정났다.
“PUT을 form 메소드로 사용한다는 것은 말도 안 된다.
네가 form payload를 통해 PUT을 해야할 일은 없을 것이다.
DELETE도 payload가 없어야만 말이 된다. 그러니 역시 form에서 제공할 이유가 없다.”
- Ian Hickson 이 PUT/DELETE 를 지원하지 않는 이유
- Form은 서버에 정보를 제출하기 위해 존재한다
- GET과 POST는 form에 존재하는 대화형 컨트롤에 입력된 값을 보낸다
- POST와 PUT의 가장 큰 차이
PUT에서는 동봉된 representation은 대상 리소스의 상태를 대체한다. 즉, 리소스 자체가 되어야 한다.
따라서,
GET은 form에 있는 정보를 줄테니 나에게 리소스(representation)를 줘
POST는 form에 있는 정보를 줄테니 이걸로 처리 좀 해줘
가 된다.
그래서, DELETE에서 URI는 리소스를 정확하게 식별하고 요청을 보내기 때문에 form을 통해 값을 전달할 게 없으며
권한을 획득하기 위해선 header를 이용해야할 것 같다.
PUT도 전송해야할 것은 대상 리소스를 대체할 representation 그 자체인데, 대상 리소스더러 조각난 form 데이터를 처리하라고 보낼 수는 없는 노릇이다.
출처: http://haah.kr/2017/05/23/rest-http-method-in-html-form/