웹 애플리케이션에서 HTTP Put 및 Delete를 사용하지 않는 이유가 있습니까?

StackOverflow https://stackoverflow.com/questions/1101888

  •  12-09-2019
  •  | 
  •  

문제

주위를 둘러 보면, 나는 요청과 게시 외에 무엇이든 사용하는 단일 웹 응용 프로그램 (웹 서비스가 아님)의 이름을 지정할 수 없습니다. 이것에 대한 특정한 이유가 있습니까? 일부 브라우저 (또는 서버)가 다른 유형의 요청을 지원하지 않습니까? 아니면 이것이 역사적 이유로 만 있습니까? 서버 측에서 내 인생을 조금 더 쉽게 만들기위한 Put and Deflete 요청을 사용하고 싶습니다. 그러나 다른 사람은 아무도 없기 때문에 꺼려합니다.

도움이 되었습니까?

해결책

실제로 상당한 양의 사람들이 Browser가 아닌 API에 Put and Delete를 사용합니다. 몇 가지 예는 Atom Publishing Protocol과 Google Data API입니다.

그 외에도 대부분의 브라우저는 양식을 통해 Put and Delete를 지원하지 않기 때문에 공통 사용에 Put/Delete가 표시되지 않습니다. html5는 이것을 고치고있는 것 같습니다.

브라우저 애플리케이션에서 작동하는 방식은 다음과 같습니다. 사람들은 Put and Delete를 염두에두고 편안한 응용 프로그램을 설계 한 다음 브라우저의 게시물을 통해 해당 요청을 "터널"합니다. 예를 들어, Ruby on Rails가 숨겨진 필드를 사용하여 어떻게이를 달성하는지에 대한이 질문을 참조하십시오.

따라서, 당신은 더 큰 HTTP 동사 세트를 염두에두고 응용 프로그램을 설계하지 않을 것입니다.

편집 : 그건 그렇고, Browser 기반 양식 게시물에서 Put/Delete가 누락 된 이유에 대해 궁금한 점이 있으면 실제적인 기술적 이유가 없다는 것이 밝혀졌습니다. REST-DISCUMS 메일 링리스트, 특히 Roy Fielding의 의견에 대한이 스레드를 읽는 것은 일부 맥락에서 흥미 롭습니다.

편집 : Ajax 라이브러리가 모든 방법을 지원하는지 여부에 대한 의견이 있습니다. XMLHTTPREQUEST의 실제 브라우저 구현으로 이어집니다. 누군가 가이 링크가 편리하다고 생각할 수 있다고 생각합니다.이 링크는 브라우저를 테스트하여 HTTPRequest 객체가 다양한 HTTP 옵션을 준수하는 방법을 확인합니다.

불행히도, 나는 이러한 결과를 수집하는 참조를 모른다.

다른 팁

아주 간단히 HTML 4.01 form 요소 값만 허용한다 "POST" 그리고 "GET"그 안에 method 기인하다

보안 정책이 어려운 일부 프록시 서버로 인해이를 삭제할 수 있습니다. 어쨌든 Put and Delete를 사용하고 있습니다.

일부 브라우저는 다른 HTTP 방법을 올바르게 지원하지 않지만 세부 사항의 이름을 지정할 수는 없다는 것을 읽었습니다.

특히 레일은 브라우저가 해당 메소드를 지원하지 않더라도이를 명시 적으로 설정하기 위해 메소드 매개 변수로 양식을 포장합니다. 이 작업을 수행하려면 합리적인 예방 조치처럼 보입니다.

나는 HTTP의 모든 기능을 사용한다고 말합니다. 브라우저는 저주받습니다. 어쩌면 그것은 HTTP 프로토콜을보다 완벽하고 적절하게 사용하는 데 영감을 줄 것입니다. 그물에서 게시물과 얻는 것보다 더 많은 일이 일어나고 있습니다. 시간에 대한 브라우저 구현이이를 반영했습니다.

이것은 브라우저 및 Ajax 라이브러리에 따라 다릅니다. 예를 들어 jQuery 브라우저가 그렇지 않더라도 모든 HTTP 방법을 지원합니다. 예를 들어 참조하십시오 jQuery "Ajax"문서 "type"속성에서.

그만큼 restlet Java Framework를 사용하면 HTML 포스트 작업을 통해 요청을 터널하고 삭제할 수 있습니다. 이렇게하려면 Method = put 또는 method = 삭제를 URI의 쿼리 문자열에 추가합니다.

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

이것은 Ruby on Rails의 접근 방식과 동일합니다 (위의 @ARS에 의해 설명됨).

개인적으로, 나는 웹 애플리케이션에서 Put 또는 Delete를 사용하기위한 목적이 실제로 보이지 않습니다. 응용 프로그램이 수행하는 모든 작업은 읽기 또는 쓰기 (일명 입력 출력)입니다. HTTP 요청의 헤더에서 작업의 특성을 구별 해야하는 이유는 무엇입니까? 동일한 URL의 Form /Object /Object_id로 Ajax 호출을 할 수 있으며 Delete, 업데이트, 값을 얻거나 작성하는 것과 같은 여러 작업을 수행 할 수 있습니다. URL을 보면서, 나는 그것이 어떤 단서가 없다. Get and Post 만 사용하면 내 URL이 다음과 같습니다.

/객체/ID/삭제

/Object/ID/Create

/객체/ID/업데이트

/Object/ID-> 묵시적 get

등.

제한된 경험을 바탕으로 많은 경우 숨겨진 헤더 요청 유형보다 훨씬 깨끗합니다. 나는 하나가 풋 또는 삭제를 사용해서는 안된다고 말하는 것이 아닙니다. 단지 절대적으로 필요한 경우에만 사용하십시오.

레너드 리차드슨 (Leonard Richardson)의 "RESTFUL WEB API"를 참조하여 RESTFUL WEB API의 HTTP 요청 방법에 관한 다양한 사용 사례 및 규칙에 대한 자세한 내용을 참조하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top