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

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

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

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

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



답변

아니요. 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 호출) 구현으로 지원됩니다.


답변

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

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

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


답변

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”, “삭제”및 “옵션” .


답변

_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


답변

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

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


답변

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

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

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

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


답변

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