2009-07-09 13 views
37

주위를 둘러 보니 GET 및 POST 요청 외에도 다른 것을 사용하는 단일 웹 응용 프로그램 (웹 서비스 아님)을 지정할 수 없습니다. 이것에 대한 특별한 이유가 있습니까? 일부 브라우저 (또는 서버)가 다른 유형의 요청을 지원하지 않습니까? 아니면 역사적인 이유로 만인가? PUT 및 DELETE 요청을 사용하여 서버 측에서 내 인생을 조금 더 편하게하고 싶습니다.하지만 다른 사람이하지 않기 때문에 나는 마지 못해합니다.웹 애플리케이션에서 HTTP PUT 및 DELETE를 사용하지 않는 이유가 있습니까?

답변

39

실제로 대부분의 사람들은 PUT 및 DELETE를 사용하며, 대부분 브라우저가 아닌 API에 사용됩니다. 당신은 대부분의 브라우저는하지 않기 때문에 일반적인 사용에서 삭제 PUT 참조 /하지 않는, 그 너머

: 몇 가지 예는 아톰 출판 프로토콜 및 Google 데이터 API를이다 Forms를 통해 PUT 및 DELETE를 지원합니다. HTML5이 고정 것 같다 :

는 브라우저 응용 프로그램에 적용하는 방법은 다음과 같습니다 사람들은 게시물을 통해 다음 "터널"이러한 요청을 PUT과 함께 편안하고 응용 프로그램을 설계하고 마음에 DELETE 브라우저. 그래서

는 HTTP의 큰 세트로 응용 프로그램을 디자인 당신의 자신에하지 않을 것이다 : 레일에 루비를 사용하여이 숨겨진 필드를 수행하는 방법을 예를 들어,에이 SO 질문 참조 동사 마음에.

편집 : 그런데 브라우저 기반 양식 게시물에서 PUT/DELETE가 누락 된 이유에 대해 궁금한 점이 있다면 기술적 인 이유가 없습니다. 나머지-논의 메일 링리스트, 특히 로이 필딩의 의견에이 스레드 주위를 읽는 것은 어떤 상황에 대한 흥미 롭다 :

편집 : AJAX 라이브러리 여부에 대한 몇 가지 의견이 모든 방법이 지원됩니다 . XMLHttpRequest의 실제 브라우저 구현으로 바뀌 었습니다. 브라우저가 HttpRequest 객체가 다양한 HTTP 옵션을 얼마나 준수하는지 확인하기 위해이 링크를 쉽게 찾을 수있을 것이라고 생각했습니다. http://www.mnot.net/javascript/xmlhttprequest/

  • 불행하게도, 나는이 결과를 수집하는 기준을 알고하지 않습니다.

+6

맞춰보세요. 최신 버전 (2010 년 10 월 19 일)에서는 HTML5의 PUT/DELETE 지원이 제거 된 것처럼 보입니다. http://www.w3.org/TR/html5/forms.html#form-submission-0 –

+0

@Xie : 흥미로운 찾기. 나에게 역효과가있는 것 같아 ... –

3

거친 보안 정책이있는 일부 프록시 서버는 정책을 삭제할 수 있습니다. 나는 PUT과 DELETE를 사용하고 있습니다.

3

일부 브라우저는 다른 HTTP 메서드를 제대로 지원하지 않지만 일부 이름은 지정할 수 없습니다.

레일즈는 특히 브라우저가 이러한 메소드를 지원하지 않더라도 명시 적으로이를 설정하기 위해 메소드 매개 변수로 양식을 패키징합니다. 당신이 이것을하려고한다면 그것은 합당한 예방책처럼 보입니다.

9

은 아주 간단하게 HTML 4.01 form element는이 브라우저와 Ajax 라이브러리에 따라 그 method 속성

+0

흠, 그건 이해가 될 것이다 ...하지만 이것은 Ajax 요청에는 적용되지 않는다, 그렇지? 내가 원하는 어떤 방법이라도 사용할 수 있습니까? –

+0

브라우저가 HTML 4.01 스펙으로 빌드 된 경우, 스펙 이외의 사항을 이해하지 못합니다. 브라우저에서 수행 할 수 있다고 가정 할 수 있습니다. – Gareth

+3

브라우저는 일반적으로 단순한 HTML 사양 이상으로 작성됩니다. JavaScript는 HTML 4.01의 일부가 아닙니다. – aehlke

0

의 값 "POST"와 "GET"을 할 수 있습니다. 예를 들어 jQuery은 브라우저가 지원하지 않더라도 모든 HTTP 메소드를 지원합니다. 예를 들어 jQuery "ajax" documentation의 'type'속성을 참조하십시오.

Restlet Java 프레임 워크를 사용하면 HTML POST 작업을 통해 PUT 및 DELETE 요청을 터널링 할 수 있습니다. 이렇게하려면, 당신은 단지 예를 들어, 당신의 URI의 쿼리 문자열에 삭제 = 넣어 또는 방법 = 방법을 추가

http://www.example.com/user=xyz?method=delete ... 

이 동일하다 루비 (위 @ars에 의해 설명 된 바와 같이) 레일 '접근합니다.

+2

jQuery 문서에서 "PUT 및 DELETE와 같은 다른 HTTP 요청 방법도 여기에서 사용할 수 있지만 모든 브라우저에서 지원하지는 않습니다." 그래서 당신은 틀렸어. –

1

나는 HTTP의 모든 기능을 사용한다고 말하면 브라우저는 저주받을 수 있습니다. 어쩌면 앞으로 나아갈 HTTP 프로토콜의보다 완전하고 적절한 사용에 영감을 줄 수있을 것입니다. POST 및 GET보다 그물에서 더 많은 일이 발생합니다. 시간 브라우저 구현 정보는이를 반영합니다.

+0

하하, 그러길 바래. 불행히도 내 웹 응용 프로그램을 * 작동하지 않는 것으로 생각하지 않습니다 * 사용자를 분노 이외에 아무것도 할 것입니다. :) –

+0

흠 ... 그래, 네가 요점을 가지고 있다고 생각해. 오 잘, 그것은 좋은 생각이었다. – codemonkey

+2

하지만 기다려 ... 마이크로 소프트에서 작동합니다 ... – codemonkey

0

개인적으로 웹 응용 프로그램에서 PUT 또는 DELETE를 사용하는 데 어떤 목적도 실제로 보이지 않습니다. 응용 프로그램이 수행하는 모든 작업은 읽기 또는 쓰기, 일명 입력 출력입니다. HTTP 요청의 헤더에서 작업의 성격을 구분해야하는 이유는 무엇입니까? 양식의/object/object_id가 동일한 URL 인 을 사용하여 ajax를 호출하고 삭제, 업데이트, 값 가져 오기 또는 만들기와 같은 여러 작업을 수행 할 수 있습니다. URL을 보면 단지 어떤 URL인지 알 수 없습니다. GET 및 POST를 사용하여 만 내 URL이 될 것입니다 :

/객체/ID가 삭제/

/객체/ID 생성/

/객체/아이디/업데이트

/객체/ID -> 암시 GET

등 내 제한된 경험을 바탕으로

, 이것은 많은 경우에 숨겨진 헤더 요청 유형보다 훨씬 청소기입니다. PUT 또는 DELETE를 절대로 사용해서는 안된다는 말은 아니며 꼭 필요한 경우에만 사용하십시오.

RESTful 웹 API에서 HTTP 요청 방법과 관련된 다양한 사용 사례 및 규칙에 대해 자세히 알아 보려면 Leonard Richardson의 "RESTful Web API"를 참조하십시오.

관련 문제