HTTP协议中PUT和DELETE的用法及在PHP中的使用

13 浏览
0 Comments

HTTP协议中PUT和DELETE的用法及在PHP中的使用

介绍

我读过以下内容:

超文本传输协议(HTTP)是 Web 的生命线。每当您传输文档或进行 AJAX 请求时都会使用它。但是,在一些 Web 开发人员中,HTTP 令人惊讶地是个相对不知名的东西。

HTTP 动词占据了我们“统一接口”约束的主要部分,并为基于名词的资源提供了动作对应项。最常用的 HTTP 动词(或方法,按其正确称呼)为 POST、GET、PUTDELETE

嗯?

好吧,我们来到了我忘了东西的地方。

PUTDELETE,他们说。我只听说过 POSTGET,从未见过像 $_PUT$_DELETE 这样的内容在任何我查看过的 PHP 代码中出现过。

我的问题

这些方法 (PUT) 和 (DELETE) 是用来做什么的,如果在 PHP 中使用它们是可能的,我应该怎么做。

注意:我知道这不是真正的问题,但我总是抓住学习机会,如果可以在 PHP 中使用这些方法,我非常想学习。

admin 更改状态以发布 2023年5月25日
0
0 Comments

PHP中使用PUT数据的方法:

$method = $_SERVER['REQUEST_METHOD'];
if ('PUT' === $method) {
    parse_str(file_get_contents('php://input'), $_PUT);
    var_dump($_PUT); //$_PUT contains put fields 
}

0
0 Comments

PUT方法和DELETE方法是用来做什么的...

这个问题用很多的词都可以解释清楚,但我还不够熟练,但是我之前发过的回答已经给了一个很快的概述,参考HTTP规范说明

协议基本上是这样说的:

  • 当你需要访问资源和检索数据,而且你不必修改或更改数据状态时,请使用GET

  • 当你需要向服务器发送一些数据,例如从表单保存这些数据时,请使用POST

  • 当你需要访问资源并只从响应中检索标头时,请使用HEAD,不需要任何资源数据。

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

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

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

  • 你可以在该文档中了解到其他两种方法,但是很抱歉我从未使用过。

基本上,协议是应用程序应遵循的一组规则。


... 如果可能在PHP中使用它们,我该如何操作?

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

所以从您的php应用程序中,您现在能够识别出这是一个DELETE或PUT请求,例如:$_SERVER['REQUEST_METHOD'] === 'DELETE'$_SERVER['REQUEST_METHOD'] === 'PUT'

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



以下是一个处理这两个http请求的可能方式的示例和小描述

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

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

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

因此,PUT请求看起来像这样:

PUT /something/index.php
(body) maybe=aparameter

您可以通过读取php://input流访问这些数据,例如:

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状态码-无内容-)。

0