php - HTTP协议(protocol)的PUT和DELETE及其在PHP中的使用

标签 php http http-delete http-put http-options-method

简介

我已阅读以下内容:

Hypertext Transfer Protocol (HTTP) is the life of the web. It's used every time you transfer a document, or make an AJAX request. But HTTP is surprisingly a relative unknown among some web developers.

The HTTP verbs comprise a major portion of our “uniform interface” constraint and provide us the action counterpart to the noun-based resource. The primary or most-commonly-used HTTP verbs (or methods, as they are properly called) are POST, GET, PUT, and DELETE.

嗯?

好吧,我们到了我忘记了事情的地步。

PUTDELETE,他们说。我只听说过 POSTGET 并且从未见过像 $_PUT$_DELETE 这样的东西经过在我看过的任何 PHP 代码中。

我的问题

这些方法 (PUT) 和 (DELETE) 的用途是什么?如果可以在 PHP 中使用它们,我将如何处理。

注意:我知道这不是一个真正的问题,但如果我看到一个,我总是会捕获一个学习机会,如果可能的话,我非常想学习在 PHP 中使用这些方法。

最佳答案

What are these methods (PUT) and (DELETE) for...

要花很多话来解释这一点,我还不够熟练,但正如已经发布的那样,快速回顾一下 HTTP specification 的内容描述。

协议(protocol)基本上是这样说的:

  • 当您需要访问资源和检索数据时使用 GET,您不必修改或更改此数据的状态。

  • 当您需要向服务器发送一些数据时,请使用 POST。前任。从表单中将这些数据保存在某处。

  • 当您需要访问资源并仅从响应中检索 header 时使用HEAD,而不需要任何资源数据。

  • 当您需要替换该系统上已存在的某些数据的状态时,请使用 PUT

  • 当您需要在该系统上删除资源(相对于您发送的 URI)时,请使用 DELETE

  • 当您需要从资源中获取通信选项时,请使用 OPTIONS,以便检查该资源的允许方法。前任。我们将其用于 CORS 请求和权限规则。

  • 您可以阅读该文档中剩余的两种方法,抱歉我从未使用过。

基本上,协议(protocol)是您应该在应用程序中使用以遵守它的一组规则。


... and if it's possible to use them in PHP, how would I go about this.

从您的 php 应用程序中,您可以通过查看 super 全局数组 $_SERVER 并检查字段 REQUEST_METHOD 的值来检索使用的方法。

因此,您现在可以从您的 php 应用程序中识别这是一个 DELETE 还是一个 PUT 请求,例如。 $_SERVER['REQUEST_METHOD'] === 'DELETE'$_SERVER['REQUEST_METHOD'] === 'PUT'

* 还请注意,某些处理不支持 PUT 或 DELETE 方法的浏览器的应用程序使用以下技巧,即 html 表单中的隐藏字段,其动词在其 value 属性中指定,例如:

<input name="_method" type="hidden" value="delete" />

下面是一个简单描述处理这 2 个 http 请求的可能方式的示例

当您(您的浏览器、您的客户端)向 HTTP 服务器请求资源时,您必须使用协议(protocol) (HTTP) 接受的方法之一。所以你的请求需要通过:

  • 一种方法
  • 资源的 Uri
  • 请求 header ,例如 User-Agent、Host、Content-Length 等
  • (请求的可选正文)

现在,虽然在 PUT 和 DELETE 的情况下,您可以使用各自的全局变量($_GET$_POST)从 POST 和 GET 请求中获取数据requests PHP 不提供这些快速访问全局变量;但是您可以使用 $_SERVER['REQUEST_METHOD'] 的值来检查请求中的方法并相应地处理您的逻辑。

所以 PUT 请求如下所示:

PUT /something/index.php

(body) maybe=aparameter

您可以通过读取 php://input 流在 PHP 中访问这些数据,例如。类似于:

if ($_SERVER['REQUEST_METHOD'] === 'PUT') { 
    $myEntireBody = file_get_contents('php://input'); //Be aware that the stream can only be read once
}

DELETE 请求如下所示:

DELETE /something/index.php?maybe=aparameter

您可以在检查方法后再次构建您的逻辑:

if ($_SERVER['REQUEST_METHOD'] === 'DELETE') { 
    // do something
}

请注意 DELETE 请求没有正文,并且也非常注意响应状态代码(例如,如果您收到 PUT 请求并且您已正确更新该资源,则应返回 204 状态 -没有内容-).

关于php - HTTP协议(protocol)的PUT和DELETE及其在PHP中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27941207/

相关文章:

asp.net - "The provided URI scheme ' https ' is invalid; expected ' http '. Parameter name: via"- 帮助?

部分成功请求的 HTTP 状态代码

c# - HTTP 删除请求

php - 如何检测是否设置了 $_POST?

php - 用 0 替换平面数组中的所有值

http - 为什么HTTP协议(protocol)要设计成明文方式?

java - 如何发出 HTTP 删除/更新请求?

ajax - Express 中 'delete' 之后重定向

php - 标签到搜索按钮?

php - 带有可选参数的 PDO 准备语句