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

介绍

我读过以下内容:

超文本传输​​协议(HTTP)是网络的生命。 每次您传输文档或发出AJAX请求时都会使用它。 但是,在某些Web开发人员中,HTTP令人惊讶地是相对未知的。

HTTP动词构成了我们“统一接口”约束的主要部分,并为我们提供了与名词类资源相对应的动作。 主要或最常用的HTTP动词(或方法,因为它们被正确调用)是POST,GET, PUTDELETE

咦?

那么,我们到了一个地步,我失去了一些东西。

他们说, PUTDELETE 。 我只听说过POSTGET ,从来没有见过类似$_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)接受的方法之一。 所以你需要通过:

  • 一个方法
  • 资源的一个Uri
  • 请求头,如用户代理,主机,内容长度等
  • (请求的可选正文)
  • 所以请求应该如下所示:

    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

    上一篇: HTTP protocol's PUT and DELETE and their usage in PHP

    下一篇: PUT/DELETE XMLHttpRequest Not Working in Firefox