Programing

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

lottogame 2020. 10. 3. 09:45
반응형

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


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

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

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

그러나 Firefox의 몇 가지 빠른 테스트는 전송 PUTDELETE요청이 예상대로 작동 함을 XMLHttpRequest보여줍니다. 성공적으로 완료되고 요청이 올바른 방법으로 서버 로그에 표시됩니다. 브라우저 간 호환성이나 명백하지 않은 제한과 같이 내가 놓친 부분이 있습니까?


아니요. HTML 5 사양 에는 다음이 언급되어 있습니다.

method 및 formmethod 콘텐츠 속성은 다음 키워드 및 상태를 사용하여 열거 된 속성입니다.

HTTP GET 메서드를 나타내는 get 상태로 매핑되는 get 키워드 입니다. GET 메서드는 데이터를 요청 및 검색 만해야하며 다른 효과는 없어야합니다.

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

상태 대화 상자 에 매핑 되는 키워드 dialog 는 양식 제출이 양식이 자신을 찾고 제출하지 않는 대화 상자를 닫는다는 것을 나타냅니다.

이러한 속성에 대한 유효하지 않은 기본값은 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", "UNLOCK"및 "OPTIONS" .


_method 숨겨진 필드 해결 방법

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

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

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

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

  • 실제 양식 방법을 POST로 수정 ( <form method="post")

  • _method서버에서 프로세스 를 수행하고 실제 POST 대신 해당 메서드가 전송 된 것처럼 정확하게 수행합니다.

불가능한 이유 / 역사 : https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms


나는 이러한 댓글이 브라우저를 가리키는 것이 아니라 링크를 클릭하고 양식을 제출하는 것과 관련이 있다고 생각합니다 XMLHttpRequest. XMLHttpRequest것을 단지 지정 클라이언트입니다 당신이 런타임과 브라우저를 사용하여 자바 스크립트를 썼다.

UPDATE: To clarify, I did not mean (though I did write) that you wrote XMLHttpRequest; I meant that you wrote the code that uses XMLHttpRequest. The browsers do not natively support XMLHttpRequest. XMLHttpRequest comes from the JavaScript runtime, which may be hosted by a browser, although it isn't required to be (see Rhino). That's why people say browsers don't support PUT and DELETE—because it's actually JavaScript that is supporting them.


YES, PUT, DELETE, HEAD etc HTTP methods are available in all modern browsers.

To be compliant with XMLHttpRequest Level 2 browsers must support these methods. To check which browsers support XMLHttpRequest Level 2 I recommend CanIUse:

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

Only Opera Mini is lacking support atm (juli '15), but Opera Mini lacks support for everything. :)


Just to add - Safari 2 and earlier definitely didn't support PUT and DELETE. I get the impression 3 did, but I don't have it around to test anymore. Safari 4 definitely does support PUT and DELETE.

참고URL : https://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-most-web-browsers

반응형