대부분의 웹 브라우저에서 PUT, DELETE, HEAD 등의 방법을 사용할 수 있습니까?
여기에서 RESTful 서비스를 디버깅하는 방법 과 같은 몇 가지 질문을 보았습니다 .
불행히도 동일한 브라우저로는 HTTP PUT, DELETE 및 HTTP POST를 어느 정도 테스트 할 수 없습니다.
또한 브라우저는 다음과 같은 다른 소스에서 GET 및 POST 만 지원한다고 들었습니다.
- http://www.packetizer.com/ws/rest.html
- http://www.mail-archive.com/jmeter-user@jakarta.apache.org/msg13518.html
- http://www.xml.com/cs/user/view/cs_msg/1098
그러나 Firefox의 몇 가지 빠른 테스트는 전송 PUT
및 DELETE
요청이 예상대로 작동 함을 XMLHttpRequest
보여줍니다. 성공적으로 완료되고 요청이 올바른 방법으로 서버 로그에 표시됩니다. 브라우저 간 호환성이나 명백하지 않은 제한과 같이 내가 놓친 부분이 있습니까?
아니요. HTML 5 사양 에는 다음이 언급되어 있습니다.
method 및 formmethod 콘텐츠 속성은 다음 키워드 및 상태를 사용하여 열거 된 속성입니다.
HTTP GET 메서드를 나타내는 get 상태로 매핑되는 get 키워드 입니다. GET 메서드는 데이터를 요청 및 검색 만해야하며 다른 효과는 없어야합니다.
HTTP POST 메서드를 나타내는 POST 상태에 매핑되는 post 키워드 입니다. POST 메서드는 서버가 제출 된 양식의 데이터를 처리하도록 허용하도록 요청합니다. 이로 인해 항목이 데이터베이스에 추가되거나 새 웹 페이지 리소스가 생성되거나 기존 페이지가 업데이트되거나 언급 된 모든 결과가 발생할 수 있습니다. .
상태 대화 상자 에 매핑 되는 키워드 dialog 는 양식 제출이 양식이 자신을 찾고 제출하지 않는 대화 상자를 닫는다는 것을 나타냅니다.
이러한 속성에 대한 유효하지 않은 기본값은 GET 상태입니다.
즉 HTML 양식 은 HTTP 요청 방법으로 GET 및 POST 만 지원 합니다. 이에 대한 해결 방법은 서버에서 읽은 숨겨진 양식 필드를 사용하여 POST를 통해 다른 메서드를 터널링하고 그에 따라 요청을 전달하는 것입니다.
그러나 GET , POST , PUT 및 DELETE 는 모든 주요 웹 브라우저 (IE, Firefox, Safari, Chrome, Opera)의 XMLHttpRequest 구현 (예 : AJAX 호출)에 의해 지원됩니다.
HTML 양식은 GET 및 POST를 지원합니다. (HTML5는 한 시점에서 PUT / DELETE를 추가했지만 삭제되었습니다.)
XMLHttpRequest는 CHICKEN을 포함한 모든 메소드를 지원하지만 일부 메소드 이름은 대소 문자를 구분하지 않고 (메소드는 HTTP에 따라 대소 문자를 구분 함) 일부 메소드 이름은 보안상의 이유로 전혀 지원되지 않습니다 (예 : CONNECT).
브라우저는 XMLHttpRequest에 지정된 규칙에 천천히 수렴하고 있지만 다른 의견이 지적했듯이 여전히 약간의 차이가 있습니다.
XMLHttpRequest
JavaScript 개체 모델의 표준 개체입니다.
Wikipedia에 따르면 XMLHttpRequest
Internet 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
, PUT
와 DELETE
같은 RFC 2616에 의해 지정 .
_method
숨겨진 필드 해결 방법
Rails에서 사용되며 모든 프레임 워크에 적용 할 수 있습니다.
_method
GET 또는 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:
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.
'Programing' 카테고리의 다른 글
wget을 통해 Linux에서 Java JDK를 다운로드하면 대신 라이센스 페이지가 표시됩니다. (0) | 2020.10.03 |
---|---|
다중 인덱스 vs 다중 열 인덱스 (0) | 2020.10.03 |
git은 수정 된 변경 사항 만 추가하고 추적되지 않은 파일은 무시합니다. (0) | 2020.10.03 |
Python에서 "열기 사용"을 사용하여 여러 파일을 열려면 어떻게해야합니까? (0) | 2020.10.03 |
이름이 ''인 잘못된 양식 컨트롤은 초점을 맞출 수 없습니다. (0) | 2020.10.03 |