웹 개발을 처음 배우다 보면 form
태그를 통해서 서버로 데이터를 보낸다고 배운다. 그런데 조금 더 공부하다 보면 GET
, POST
뿐 아니라 PUT
과 DELETE
를 사용해 어플리케이션을 만드는 경우가 많은 것을 볼 수 있다. 그런데 왜 form은 GET과 POST밖에 지원하지 않을까?
<form>
태그의 역사적 배경
HTML의 초기 버전은 간단한 웹 페이지와 상호작용에 중점을 두었다. 초기 웹은 주로 문서를 읽고 쓰는 데 초점을 맞췄고, GET
과 POST
메소드는 이 목적의 대부분을 충족시킬 수 있었다. <form>
태그가 설계될 당시, 웹은 주로 문서 지향적이었고, 복잡한 데이터 조작보다는 기본적인 데이터 제출에 중점을 두었다.
RESTful API가 등장하면서, PUT
과 DELETE
같은 메소드의 중요성이 증가했다. 이러한 메소드들은 웹 애플리케이션에서 자원을 관리하는 데 필수적인 부분이 되었다. 하지만, 이러한 변화에도 불구하고, HTML 표준은 여전히 오직 GET
과 POST
메소드만 <form>
태그에서 지원한다.
PUT
과 DELETE
를 지원하려는 시도
2010년 W3C 버그 리포트에 HTML에 PUT
과 DELETE
를 지원하는 버그 리포트에서 해당 주제로 논의가 이뤄진 것을 볼 수 있다. 이슈에서 찬성측과 반대하는 측의 요지는 다음과 같다.
찬성 측: PUT
과 DELETE
를 HTML 폼에서 지원하는 것은 웹 애플리케이션의 기능을 확장하고, RESTful 시스템과의 상호작용을 간소화할 수 있다. 이는 개발자들이 HTTP PUT
/DELETE
와 ETag
상호작용을 모방하는 복잡한 방법을 사용하지 않도록 도와줄 수 있다.
반대 측: PUT
과 DELETE
의 구현이 명확하지 않고, 이러한 메서드를 HTML 폼에서 사용하는 방법이 불분명하다. 또한, 이 기능을 추가하는 것은 추가적인 복잡성을 초래하며, 현재로서는 이러한 복잡성이 정당화되지 않는다.
결과적으로 이슈는 Won't fix로 닫혔고 이후에 W3C 이슈 트래커로 올라갔지만 현재까지 HTML 폼에서 PUT
과 DELETE
메서드를 직접 지원하지 않는 상태이다.