대부분의 웹 브라우저에서 PUT, DELETE, HEAD 등의 방법을 사용할 수 있습니까?


608

RESTful 서비스를 디버깅하는 방법 과 같은 몇 가지 질문을 보았습니다 .

불행히도 동일한 브라우저를 사용하면 HTTP PUT, DELETE 및 어느 정도까지는 HTTP POST를 테스트 할 수 없습니다.

또한 브라우저는 다음과 같은 다른 소스에서 GET 및 POST 만 지원한다고 들었습니다.

그러나 Firefox에서 몇 가지 빠른 테스트를 통해 전송 PUTDELETE요청이 예상대로 작동하는 것으로 나타났습니다 . XMLHttpRequest완료되면 요청이 올바른 방법으로 서버 로그에 나타납니다. 브라우저 간 호환성 또는 명백하지 않은 제한과 같이 누락 된 부분이 있습니까?


1
걱정할 필요가있는 클라이언트 만이 아니라 많은 서버 측 프레임 워크가 GET 및 POST 만 지원합니다.
derby

7
John, REST 태그를 원하지 않는 이유는 무엇입니까?
John Saunders

11
이것을 읽는 사람들은 RESTful API를 조사하고있을 가능성이 있습니다.
djjeck


아니요, 모든 브라우저가 PUT / DELETE 방법을 지원하지 않으며 모든 서버 측 기술이 PUT / DELETE를 지원하지는 않습니다. HTML 5 지원 브라우저 만 PUT / DELETE를 지원합니다.
Jani Devang

답변:


463

아니요. HTML 5 사양은 다음과 같습니다.

method 및 formmethod 컨텐츠 속성은 다음 키워드 및 상태를 갖는 속성입니다.

키워드 는 HTTP GET 방법을 나타내는 상태 GET에 매핑. GET 메소드는 데이터를 요청하고 검색해야하며 다른 영향을 미치지 않아야합니다.

키워드 포스트 는 HTTP POST 방법을 나타내는 상태 POST로, 매핑. POST 메소드는 서버가 제출 된 양식의 데이터를 처리하도록 요청하여 데이터베이스에 항목이 추가되거나 새 웹 페이지 자원이 작성되거나 기존 페이지가 업데이트되거나 언급 된 모든 결과가 발생할 수 있습니다. .

키워드 대화 상자 ( 상태 대화 상자 에 맵핑 됨)는 양식 제출이 양식이있는 대화 상자를 닫고 (있는 경우) 제출하지 않는 것을 나타냅니다.

이러한 속성의 유효하지 않은 기본값은 GET 상태입니다.

즉, HTML 양식 은 HTTP 요청 방법으로 GETPOST 만 지원 합니다. 이에 대한 해결 방법은 서버에서 읽은 요청에 따라 숨겨진 양식 필드를 사용하여 POST를 통해 다른 방법을 터널링하고 그에 따라 요청을 전달하는 것입니다.

그러나 GET , POST , PUTDELETE 모든 주요 웹 브라우저 (IE, Firefox, Safari, Chrome, Opera)에서 XMLHttpRequest (예 : AJAX 호출) 구현으로 지원됩니다.


170
아니요, 저는 확실히 HTML을 의미합니다 (텍스트에서 명확하지 않을 수 있지만 HTML 양식 기능에 대해 이야기하고 있습니다-편집하겠습니다)
Matthew Murdoch

6
@ Matthew : 이것은 IE6 또는 IE7을 사용하면 다음과 같이 의미합니다 .- <form .. method = "PUT"> ... </ form> PUT이 HTML 4에 유효하지 않기 때문에 작동하지 않습니까?
Pure.Krome

6
@ Pure.Krome (14 개월 후) 아니요, HTML 4.01 사양에서 <form method = "put"> 또는 <form method = "delete">을 수행 할 수 없습니다. IE8, Chrome3 또는 FF3.5에서는 GET 및 POST 만 지원합니다.
Jarrett Meyer

23
@porneL @Alan HTML5에서 추가 한 다음 제거했습니다. 현재는 GET 및 POST 만 허용됩니다. goo.gl/8EuZk
Adam Lassek

13
@porneL HTML5가 추가 한 다음 제거하면 버그가 다시 열립니다. 흥미롭게도, 나는 여전히 거기에 문서가있는 문서를 보았습니다. 당신이 집에서 함께 따라하려는 경우 여기에 버그 : w3.org/Bugs/Public/show_bug.cgi?id=10671
에밀 레르 히

79

HTML 양식은 GET 및 POST를 지원합니다. (한 번에 HTML5에 PUT / DELETE가 추가되었지만 삭제되었습니다.)

XMLHttpRequest는 CHICKEN을 포함한 모든 메소드를 지원하지만 일부 메소드 이름은 대소 문자를 구분하지 않고 (HTTP마다 메소드는 대소 문자를 구분 함) 보안상의 이유로 일부 메소드 이름은 전혀 지원되지 않습니다 (예 : CONNECT).

브라우저는 XMLHttpRequest에 의해 지정된 규칙에 천천히 수렴하고 있지만 다른 의견에서 지적했듯이 여전히 약간의 차이가 있습니다.


5
최신 HTML5 초안으로 PUT 및 DELETE 지원이 중단 된 것 같습니다 : dev.w3.org/html5/spec/Overview.html#attr-fs-method
Stefan Tilkov

3
초안은 그들을 다시 얻기 위해 제안되었다 : amundsen.com/examples/put-delete-forms
주스트 Baaij을

26
치킨? 새? CHECKIN을 의미한다고 가정합니다. 재미있는 모음 교환입니다.
JayC

52
아니요, 치킨을 의미했습니다. 모음 스왑이 재미 있다고 동의했습니다 :-)
Anne

6
내가이 CHICKEN 사업에서와 같이 당황한 사람들을 위해 .... w3c-test.org/XMLHttpRequest/open-method-case-sensitive.htm
n0nag0n

43

XMLHttpRequest JavaScript 객체 모델의 표준 객체입니다.

Wikipedia에 따르면 XMLHttpRequestInternet Explorer 5에서 ActiveX 객체로 처음 나타 났지만 이후 표준으로 만들어졌으며 1.0, Apple Safari 1.2, Opera 7.60-p1 및 IE 7.0 이후 Mozilla 제품군에서 JavaScript로 사용하기 위해 포함되었습니다 .

open()방법 개체에 대한 인수로 HTTP 메소드 소요 - 그리고 유효한 HTTP 방법 (링크의 항목 번호 5 참조) 것으로 지정되어 -을 포함 GET, POST, HEAD, PUTDELETE같은 RFC 2616에 의해 지정 .

참고로 IE 7–8은 "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL"HTTP 메소드 만 허용합니다. "COPY", "LOCK", "삭제"및 "옵션" .


7
나는 더 읽을 수있는 몇 가지 문서를보고 싶었다. 나는 당신을 믿지 않는다고 말하지 않았다. Wikipedia의 링크는 실제로 매우 좋습니다. 감사합니다
naugtur

19

_method 숨겨진 필드 해결 방법

Rails에서 사용되며 모든 프레임 워크에 적용 할 수 있습니다 :

  • _methodGET 또는 POST가 아닌 양식에 숨겨진 매개 변수를 추가하십시오 .

    <input type="hidden" name="_method" value="DELETE">

    이것은 HTML 생성 도우미 메소드를 통해 프레임 워크에서 자동으로 수행 될 수 있습니다 (예 : Rails form_tag)

  • 실제 양식 메소드를 POST ( <form method="post") 로 수정하십시오.

  • _method서버에서 처리 하고 실제 POST 대신 해당 메소드가 전송 된 것처럼 정확하게 수행

불가능한 이유의 근거 / 이력 : /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms


Santilli, 안녕하세요 친구이 솔루션을 제공 한 이후 오랜 시간이 지났고, 웹 개발의 초보자이기 때문에 대답 할 수있는 질문이 있습니다. 따라서 "서버에서 _method를 처리하고 실제 POST 대신 해당 메소드가 전송 된 것처럼 정확하게 수행합니다"라고 말 했으므로 PUT (또는 DELETE)가있는 숨겨진 메소드가 뷰에 있으면 실제로 PUT을 의미합니다. (또는 삭제) 요청 권리? 그렇다면 왜 시작에서 POST 메소드를 사용하고 숨겨진 PUT 또는 DELETE를 사용 하는가? POST와 PUT (또는 DELETE) 사이의 연결은 무엇입니까?
Mirich

1
@Mirich 양식은 POST 만 지원합니다. 그래서 우리는 서버가 알고있는 추가 데이터와 함께 POST를 보냅니다. 아, 나는 이것을 PUT처럼 취급해야합니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Ciro에게 관심과 답장을 보내 주셔서 감사합니다.이 시나리오를 고려할 수 있습니다 .POST는 실제 POST, PUT, PATCH 및 DELETE를 내부에 보유하는 보편적 인 것입니다. 숨겨지지 않은 채 POST를 처음에 사용하는 경우 실제 게시하다. 그러나 숨겨진 (PUT 또는 DELETE)과 함께 POST를 사용하는 경우 POST 내부의 자식으로 PUT 또는 DELETE를 사용하고 싶다는 것을 서버에 알립니다. 내가 조금 이상한 비유를 알고 있지만 맞습니까? :)
Mirich

1
@Mirich yup, 나는 당신이 아이디어를 얻었다 고 생각합니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

죄송하지만 Ciro는 마지막으로 양식 태그의 시작 부분에 PUT 또는 DELETE를 사용할 수 있고 숨겨진 것을 사용하지 않는 것이 더 좋지 않기 때문에 PUT 및 DELETE가 HTML5에서 제거 된 이유가 궁금합니다. PUT 및 DELETE 제거의 실제 이유를 간단하고 명확하게 설명 할 수 있습니다. 미리 감사드립니다 :)
Mirich

15

이러한 의견은 구체적으로 브라우저를 가리키는 것으로 생각합니다 (예 : 링크 클릭 및 양식 제출) XMLHttpRequest. XMLHttpRequest것을 단지 지정 클라이언트입니다 당신이 런타임과 브라우저를 사용하여 자바 스크립트를 썼다.

업데이트 : 명확히하기 위해, 나는 당신이 쓴 것을 의미하지 않았습니다 XMLHttpRequest. 나는 당신이 사용하는 코드를 작성했음을 의미했다 XMLHttpRequest. 브라우저는 기본적으로 지원하지 않습니다 XMLHttpRequest. XMLHttpRequest필수는 아니지만 브라우저에서 호스팅 할 수있는 JavaScript 런타임에서 제공됩니다 ( Rhino 참조 ). 사람들이 브라우저가 지원하지 않는 말을하는 이유 PUTDELETE실제로 그들을 지원하고 자바 스크립트입니다 그만하세요.


XMLHttpRequest는 JavaScript 객체 모델의 표준 객체입니다.
Jacob Krall

9
@Jacob True이지만 브라우저마다 다른 JavaScript 엔진이 있습니다. 어느 것이 PUT을 지원하는지 아는 것은 여전히 ​​도움이됩니다.
senfo

1
it's actually JavaScript that is supporting them. 사실이 아닙니다. XMLHttpRequest'호스트 객체'는 호스트에서 Javascript 코드로 기능을 노출하는 객체임을 의미합니다. JS 자체의 일부가 아닙니다.
Stijn de Witt

9

, PUT, DELETE, HEAD 등 HTTP 메소드는 모든 최신 브라우저에서 사용할 수 있습니다.

XMLHttpRequest Level 2 브라우저를 준수하려면 이러한 메소드 지원해야합니다. XMLHttpRequest Level 2를 지원하는 브라우저를 확인하려면 CanIUse를 권장합니다.

http://caniuse.com/#feat=xhr2

Opera Mini 만 지원 atm (juli '15)이 없지만 Opera Mini는 모든 지원이 부족합니다. :)


7

추가하기 위해 Safari 2 및 이전 버전은 PUT 및 DELETE를 지원하지 않았습니다. 3의 인상을 받았지만 더 이상 테스트 할 필요가 없습니다. Safari 4는 PUT 및 DELETE를 지원합니다.


5
PUT 및 DELETE를 지원하는 Safari 버전을 확인할 수 있습니까?
mjs

1
현재 모든 브라우저가 PUT & DELETE를 지원하는지, 그리고 얼마나 오래 사용할 수 있는지 자세히 설명 할 수 있습니다. "CHICKEN"예제에서 알 수 있듯이 이는 사용 된 메소드를 해석하고 JavaScript가 메소드 유형을 제한하지 않음을 해석하는 것은 전적으로 서버에 달려 있음을 의미합니까?
Cody
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.