通过Apache& amp;发送自定义HTTP标头PHP在一个宁静的Web服务中

时间:2011-04-30 11:35:42

标签: php web-services apache rest http-headers

我正在编写RESTful Web服务,在成功/不成功的操作中返回自定义/现有HTTP标头。

例如,如果验证失败,将发送401 HTTP标头等

我通过PHP header()函数发送了标题,但当然不会将其发送回调用者。我真正需要做的是通过Apache而不是PHP将标头发送回调用脚本。我正在对我在webservice中收到的数据进行某些检查,然后发送标题。我将如何通过Apache推送这些头文件呢?

谢谢!

3 个答案:

答案 0 :(得分:1)

我可能会用PHP而不是Apache来做这件事,但这只是我自己的偏好。如果对header()的调用不起作用,可能是因为在调用header()之前,某些地方有PHP空格以外的空格。请在PHP manual

中注意这一点
  

请记住,必须调用header()   在发送任何实际输出之前,   通过普通的HTML标签,空白   文件中的行,或来自PHP。它是一个   用于读取代码的常见错误   include(),或require(),函数或   另一个文件访问功能,并有   输出的空格或空行   在调用header()之前。相同   使用单个时存在问题   PHP / HTML文件。

如果必须使用Apache执行此操作,mod_headers似乎不适合。 mod_headers只能根据请求是否成功(2xx)或任何请求的条件设置标头。请参阅Header directive

相反,我认为可以通过使用mod_rewritemod_asis的组合来完成。我没有特定的“配方”,但想法是检查请求是否已获得mod_rewrite授权,如果未经授权,请将请求URI重写/重定向到包含您要发回的标题信息。

答案 1 :(得分:1)

  

我已经通过PHP发送了标题   header()函数,但当然   不会被发送回来电。

是什么让你这么肯定?我倾向于认为你在某个地方做错了什么......

答案 2 :(得分:0)

找出解决方案。传递'true'作为header()的第二个参数,并将实际状态代码作为第三个参数传递。例如,标题('HTTP 1.1 / 400 Bad Request',true,400)。这将强制400状态代码给调用者。我在LiveHTTPHeaders中至少检查过这个,所以它可能会起作用。我只需要通过卷曲来调用它就可以完全确定。