我在使用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请求的内容部分?
对于冗长的帖子感到抱歉,但我认为太多的信息比太少了.:)
我认为你在滥用HTTP DELETE.它通常应该用作删除服务器上资源的请求:请求URI指向的资源.您可以将访问令牌编码为查询参数,但这不是DELETE的使用方式.例如,要求:
DELETE /somescript.php?token=XYZ123
应该被视为从服务器删除'somescript.php'文件的请求.
您应该重写系统以使用POST请求,这是执行此类操作的常用方法.POST处理程序脚本可以删除会话并使用相应的标头进行回复,以取消设置您可能已创建的任何Cookie.