Are the PUT, DELETE, HEAD, etc methods available in most web browsers?

前端 未结 7 1192
夕颜
夕颜 2020-11-21 06:46

I\'ve seen a couple questions around here like How to debug RESTful services, which mentions:

Unfortunately that same browser won\'t allow me to test

相关标签:
7条回答
  • 2020-11-21 07:02

    _method hidden field workaround

    Used in Rails and could be adapted to any framework:

    • add a hidden _method parameter to any form that is not GET or POST:

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

      This can be done automatically in frameworks through the HTML creation helper method (e.g. Rails form_tag)

    • fix the actual form method to POST (<form method="post")

    • processes _method on the server and do exactly as if that method had been sent instead of the actual POST

    Rationale / history of why it is not possible: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

    0 讨论(0)
  • 2020-11-21 07:04

    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.

    0 讨论(0)
  • 2020-11-21 07:09

    XMLHttpRequest is a standard object in the JavaScript Object model.

    According to Wikipedia, XMLHttpRequest first appeared in Internet Explorer 5 as an ActiveX object, but has since been made into a standard and has been included for use in JavaScript in the Mozilla family since 1.0, Apple Safari 1.2, Opera 7.60-p1, and IE 7.0.

    The open() method on the object takes the HTTP Method as an argument - and is specified as taking any valid HTTP method (see the item number 5 of the link) - including GET, POST, HEAD, PUT and DELETE, as specified by RFC 2616.

    As a side note IE 7–8 only permit the following HTTP methods: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL", "COPY", "LOCK", "UNLOCK", and "OPTIONS".

    0 讨论(0)
  • 2020-11-21 07:10

    No. The HTML 5 spec mentions:

    The method and formmethod content attributes are enumerated attributes with the following keywords and states:

    The keyword get, mapping to the state GET, indicating the HTTP GET method. The GET method should only request and retrieve data and should have no other effect.

    The keyword post, mapping to the state POST, indicating the HTTP POST method. The POST method requests that the server accept the submitted form's data to be processed, which may result in an item being added to a database, the creation of a new web page resource, the updating of the existing page, or all of the mentioned outcomes.

    The keyword dialog, mapping to the state dialog, indicating that submitting the form is intended to close the dialog box in which the form finds itself, if any, and otherwise not submit.

    The invalid value default for these attributes is the GET state

    I.e. HTML forms only support GET and POST as HTTP request methods. A workaround for this is to tunnel other methods through POST by using a hidden form field which is read by the server and the request dispatched accordingly.

    However, GET, POST, PUT and DELETE are supported by the implementations of XMLHttpRequest (i.e. AJAX calls) in all the major web browsers (IE, Firefox, Safari, Chrome, Opera).

    0 讨论(0)
  • 2020-11-21 07:19

    I believe those comments refer specifically to the browsers, i.e., clicking links and submitting forms, not XMLHttpRequest. XMLHttpRequest is just a custom client that you wrote in JavaScript that uses the browser as a runtime.

    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.

    0 讨论(0)
  • 2020-11-21 07:23

    HTML forms support GET and POST. (HTML5 at one point added PUT/DELETE, but those were dropped.)

    XMLHttpRequest supports every method, including CHICKEN, though some method names are matched against case-insensitively (methods are case-sensitive per HTTP) and some method names are not supported at all for security reasons (e.g. CONNECT).

    Browsers are slowly converging on the rules specified by XMLHttpRequest, but as the other comment pointed out there are still some differences.

    0 讨论(0)
提交回复
热议问题