php - 使用 HTTP DELETE 方法时数据访问的 RESTful 问题

标签 php http rest

在使用 HTTP DELETE 指令访问脚本时,我在从 PHP 访问原始请求信息时遇到问题。我正在使用 JS 前端,它使用 Ajax 访问脚本。该脚本实际上是我正在开发的 RESTful API 的一部分。

本例中的端点是:

http://api.site.com/session

此端点用于生成可用于后续 API 请求的身份验证 token 。在此 URL 上使用 GET 方法以及修改后的 HTTP 基本身份验证版本将为客户端提供访问 token 。此 token 随后必须包含在与该服务的所有其他交互中,直到它过期。

一旦生成 token ,它就会以客户端发送服务的“接受” header 指定的格式传回客户端;在本例中为“应用程序/json”。成功后,它会响应 HTTP 200 Ok 状态代码。失败时,它会使用 HTTP 401 Authorization Required 代码抛出异常。

现在,当您想要删除 session 或“注销”时,您可以点击相同的 URL,但使用 HTTP DELETE 指令。要验证对此端点的访问,客户端必须通过提供他们想要终止的 token 来证明他们之前已经过身份验证。

如果他们“已登录”, token 和 session 将终止,服务应响应 HTTP 204 No Content 状态代码,否则,他们将再次收到 401 异常。

现在,我遇到的问题是删除 session 。使用 DELETE 指令,使用 Ajax,一旦请求到达服务,我似乎无法访问我设置的任何参数。在这种情况下,我正在寻找名为“token”的参数。

我使用 Firebug 查看原始请求 header ,我注意到“Content-Length” header 随发送的 token 大小而变化。这告诉我这个数据确实正在发送到服务器。

问题是,使用 PHP,我到底怎么访问参数信息?它不是 POST 或 GET 请求,因此我无法像通常在 PHP 中那样访问它。参数在请求的内容部分。

我试过查看 $_SERVER,但显示的 header 数量有限。我尝试了“apache_request_headers()”,它为我提供了更详细的信息,但仍然仅限于 header 。我什至试过 'file_get_contents('php://stdin');'我什么也得不到。

如何访问原始 HTTP 请求的内容部分?

对于冗长的帖子感到抱歉,但我认为信息太多总比信息太少好。 :)

最佳答案

我认为您滥用了 HTTP DELETE。它通常应该用作删除服务器上资源的请求:请求 URI 指向的资源。您可以将访问 token 编码为查询参数,但这不是应该使用 DELETE 的方式。例如,请求:

DELETE /somescript.php?token=XYZ123

应该被视为从服务器删除“somescript.php”文件的请求。

您应该重写您的系统以使用 POST 请求,这是执行此类操作的常用方法。 POST 处理程序脚本可以删除 session 并使用适当的 header 回复以取消设置您可能已创建的任何 cookie。

关于php - 使用 HTTP DELETE 方法时数据访问的 RESTful 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2752415/

相关文章:

php - wordpress登录后尝试将用户重定向到主页

google-chrome - 什么是 "Upgrade-Insecure-Requests"HTTP header ?

javascript - Angular 似乎没有运行

javascript - QML/JS/REST 认证表单

java - Dropwizard 不再支持 Java 6

PHP isset 不适用于复选框

php - 使用 php 电子邮件时在 godaddy 上收到 500 内部服务器错误

rest - 如果 POST 成功但没有创建任何新内容,我们应该返回什么状态代码?

php - 如果没有错误如何提交表单?

http - log4net:是否有一种简单的方法可以使用 HTTP POST 将错误日志发送到 URI?