2012-04-20 218 views
0

我试图设置自定义HTTP 1.0状态码,以便通过AJAX(使用jQuery)返回更多描述性错误消息。在PHP中设置LiteSpeed的自定义HTTP响应标头

在PHP我有类似:

header('HTTP/1.0 909 Hello World'); 
exit; 

这将按预期在使用Apache 2.2.15我的开发环境,但它不能在运行的Litespeed 5.5生产Web服务器的工作。 LiteSpeed返回200 OK

使用此:

header('HTTP/1.0 404 Hello World'); 
exit; 

阿帕奇返回404与上面的文字。 LiteSpeed用默认的“未找到”替换自定义文本。

任何想法如何在LiteSpeed中重写此功能以使其与Apache相同?我知道他们应该是可比的网络服务器。

任何想法,请让我知道。

-P。

回答

0

首先,为什么HTTP 1.0而不是1.1?

其次,您正在尝试执行HTTP规范中没有定义的事情。 LiteSpeed可能会检查被要求发送的标题,并用一些默认值替换它无法识别的值。

您不应该试图强制HTTP以非标准方式运行,只要您这样做,它就不再是HTTP。这些规范是为了确保不同人员在不同时间实现的软件可以互操作,以及如果不遵循规范应该如何表现的规则完全没有定义。

Apache让它不知道的头是完全可以接受的行为,LiteSpeed的行为也是拒绝让它通过。在这种情况下,让恶魔从你鼻子里飞出对于服务器来说也是有效的。客户端意味着如何处理它无法识别的HTTP响应代码?

如果您需要在标题中发送附加信息,为什么不添加新标题?以下应该做的。

header ('X-My-App-Header: Hello World!'); 
+0

所有的有效点,也许我应该采用'X-Custom-Error:Hello World'来代替更好的跨平台兼容性。 为了回应用户用它做什么,那么我会解释/处理响应以提供更具描述性的错误信息,这样就不是真正的问题。 尽管如此,我认为这可能不是最佳实践,所以欢迎更好的替代方案来实现上述目标。 – paperclip 2012-04-20 11:54:07

+1

就像我建议的那样,您可以只附加自定义标题(名称以X开头),以传达超出HTTP规范允许您返回的信息。 HTTP确实也有一套相当丰富的预定义状态代码,所以我建议从可用的最适合情况的代码中返回一个有效的HTTP状态代码,以及一个包含更多信息的X标头。 – GordonM 2012-04-20 12:00:11