web服务-通过Apache发送自定义HTTP头restful web服务中的PHP


web services - Sending custom HTTP headers via Apache & PHP in a restful webservice

我正在编写一个rest式web服务,在操作成功/不成功时返回自定义/现有的HTTP标头。

例如

。,如果认证失败,则发送401 HTTP报头,等等。

我已经通过PHP header()函数发送了头,但当然不会发送回调用者。我真正需要做的是通过Apache发送头,而不是PHP,回到调用脚本。我正在对我在web服务中接收到的数据执行某些检查,然后发送报头。我该如何去推这些头通过Apache代替?

谢谢!

我已经通过PHP发送了头Header()函数,当然不返回给调用者。

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

我可能会用PHP而不是Apache这样做,但这只是我自己的偏好。如果对header()的调用不起作用,很可能是因为在调用header()之前PHP标记之外的某个地方有空白。请在PHP手册中注意这一点:

记住header()必须被调用在发送任何实际输出之前,要么是普通的HTML标签,空白行,或者从PHP。这是一个阅读代码时很常见的错误Include()或require()、functions或另一个文件访问功能,并有输出的空格或空行在header()被调用之前。相同的使用单个时存在问题PHP/HTML文件。

如果你必须这样做与Apache, mod_headers似乎不适合。Mod_headers只能根据请求是否成功(2xx)或任何请求设置报头。

相反,我认为可以通过使用mod_rewrite和mod_asis的组合来完成。我没有一个特别的"配方",但这个想法是检查请求是否被mod_rewrite授权,如果它没有被授权,重写/重定向请求URI到一个.asis文档,其中包含您想要发回的头信息。

找到了解决方案。将'true'作为第二个参数传入header(),并将实际状态码作为第三个参数传入。如。, header('HTTP 1.1/400错误请求',true, 400)。这将强制调用者输入400状态码。我已经检查了这至少在LiveHTTPHeaders,所以它可能工作。我只需要通过curl调用它就可以了