HTTP协议的PUT和DELETE及其在PHP中的使用
介绍
我读过以下内容:
超文本传输协议(HTTP)是网络的生命。 每次您传输文档或发出AJAX请求时都会使用它。 但是,在某些Web开发人员中,HTTP令人惊讶地是相对未知的。
HTTP动词构成了我们“统一接口”约束的主要部分,并为我们提供了与名词类资源相对应的动作。 主要或最常用的HTTP动词(或方法,因为它们被正确调用)是POST,GET, PUT和DELETE 。
咦?
那么,我们到了一个地步,我失去了一些东西。
他们说, PUT
和DELETE
。 我只听说过POST
和GET
,从来没有见过类似$_PUT
或$_DELETE
东西在我看过的任何PHP代码中传递。
我的问题
这些方法(PUT)和(DELETE)是什么,如果可以在PHP中使用它们,我将如何解决这个问题。
注意:我知道这不是一个真正的问题,但如果我看到一个,我总是会抓住一个学习机会,并且非常希望学习如何在PHP中使用这些方法。
这些方法(PUT)和(DELETE)是什么?
有很多词汇可以用来解释这一点,而且我没有足够的技巧去做,但正如已经发布的那样,快速回顾了HTTP规范描述的内容。
协议基本上是这样说的:
当您需要访问资源并检索数据时使用GET ,而不必修改或更改此数据的状态。
当你需要发送一些数据到服务器时使用POST 。 防爆。 从表单保存这些数据的地方。
当您需要访问资源并仅从响应中检索Headers时,请使用HEAD ,而不使用任何资源数据。
当您需要替换该系统上已有的某些数据的状态时使用PUT 。
在需要删除该系统上的资源 (相对于您发送的URI)时使用DELETE 。
当您需要从资源获取通信选项时使用OPTIONS ,以便检查该资源允许的方法 。 防爆。 我们将它用于CORS请求和权限规则。
基本上,协议是您应该使用的一套规则来遵守它。
...如果可以在PHP中使用它们,我将如何解决这个问题。
在你的应用程序中,你应该检索使用$_SERVER['REQUEST_METHOD']
并作出相应的反应。
一些处理不支持PUT或DELETE方法的浏览器的应用程序使用这个技巧,一个来自html的隐藏字段,其值为ex .:
<input name="_method" type="hidden" value="delete" />
所以从应用程序中,您现在可以将其识别为DELETE请求。
按照PHP处理参数的简单描述:
当您(您的浏览器,您的客户端)向HTTP服务器请求资源时,您必须使用协议(HTTP)接受的方法之一。 所以你需要通过:
所以请求应该如下所示:
GET /something/index.php?maybe=aparameter
现在,在你的应用程序中,PHP从这个GET请求中获取参数,并将它们插入一个超全局(可在应用程序中访问)的数组中。 所以你可以访问返回'aparameter`的$_GET['maybe']
。
在POST请求的情况下,您以类似的方式向HTTP服务器请求资源,但有一个重要的区别。 您在请求的正文中提供数据:
POST /something/index.php
(body) maybe=aparameter
现在,在您的应用程序中,来自此POST请求的PHP将采用这些参数并将它们插入到超全局(整个应用程序中可访问)数组中。 所以你可以访问返回'aparameter`的$_POST['maybe']
。
请特别注意响应状态代码(例如,如果您收到了PUT请求,并且您更新了该资源而没有错误,则应返回204状态 - 无内容) 。
从PHP使用PUT数据的方式:
$method = $_SERVER['REQUEST_METHOD'];
if ('PUT' === $method) {
parse_str(file_get_contents('php://input'), $_PUT);
var_dump($_PUT); //$_PUT contains put fields
}
这些方法是什么(PUT)和(DELETE)
在HTTP规范中有描述。
简而言之,并且有点简化, PUT
用于将文件上传到URL, DELETE
用于从URL中删除文件。
从来没有见过类似$_PUT
或$_DELETE
东西在我看过的任何PHP代码中传递
$_POST
和$_GET
被命名为superglobals。 $_POST
用于从请求主体解析的数据。 $_GET
用于从URL解析的数据。 没有任何东西将这些地方(特别是URL)中的数据严格地与特定请求方法相关联。
DELETE请求只关心URL的路径,所以没有要解析的数据。
PUT请求通常关心您将使用file_get_contents('php://input');
访问的整个请求主体(而不是其解析版本file_get_contents('php://input');
。
因为如果可以在PHP中使用它们,我将如何去做这件事。
您需要将URL映射到PHP脚本(例如,使用URL重写),测试请求方法,确定您实际处理的URL,然后编写代码以执行相应的操作。
链接地址: http://www.djcxy.com/p/41119.html