当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用HTTPDELETE方法时数据访问的RESTful问题》经验,为你挑选了1个好方法。

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

此示例中的端点是:

http://api.site.com/session

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

生成令牌后,会以客户端发送服务的"Accept"标头指定的格式将其传递回客户端; 在这种情况下'application/json'.成功后,它会响应HTTP 200 Ok状态代码.失败时,它会使用HTTP 401 Authorization Required代码抛出异常.

现在,当您要删除会话或"注销"时,您使用HTTP DELETE指令访问相同的URL.要验证对此端点的访问权限,客户端必须通过提供要终止的令牌来证明它们之前已经过身份验证.

如果他们"登录",则终止令牌和会话,并且服务应该使用HTTP 204 No Content状态代码进行响应,否则,他们再次受到401异常的欢迎.

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

我使用Firebug查看原始请求标头,我注意到'Content-Length'标头随着发送标记的大小而变化.这告诉我这个数据确实被发送到服务器.

问题是,使用PHP,我如何获取参数信息?它不是POST或GET请求,因此我无法像在PHP中那样访问它.参数在请求的内容部分内.

我已经尝试查找$ _SERVER,但这显示我有限的标头数量.我尝试了'apache_request_headers()',这给了我更详细的信息,但仍然只针对标题.我甚至试过'file_get_contents('php:// stdin');' 我一无所获

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

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



1> Marc B..:

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

DELETE /somescript.php?token=XYZ123

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

您应该重写系统以使用POST请求,这是执行此类操作的常用方法.POST处理程序脚本可以删除会话并使用相应的标头进行回复,以取消设置您可能已创建的任何Cookie.


从客户端的角度来看,`DELETE /somescript.php?token = XYZ123`是一个删除资源`/somescript.php?token = XYZ123`的请求,而不是`/ somescript.php`.网址对客户端不透明.
推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有