我的自定义HTTP错误消息在php中被覆盖


My custom HTTP error message is getting overwritten in php

所以我使用cakepp和ajax提交表单。在某些情况下,它会返回一个自定义错误。

例如,在某一点上,它可以是:

Failed to load resource: the server responded with a status of 412 
([{"field":"PaymentCardholderName","message":"Please enter CardHolder's Name."},
{"field":"PaymentCardNumber","message":"Please enter Card Number."},
{"field":"PaymentCvvNumber","message":"Please enter CVV Number."},
{"field":"PaymentBillingAddress","message":"Please enter your Billing Address"}])

以下是服务器逻辑,以防有人需要

header('HTTP/1.1 412 ' . json_encode($error));

当我在本地打开它时,我会看到我的自定义错误消息。当我将其部署到远程服务器时,我只看到我的自定义错误消息被覆盖

Failed to load resource: the server responded with a status of 412 
(Precondition Failed)

它一定是一些配置,但我找不到。

此外,不假定HTTP/1.1

这样做:

header($_SERVER["SERVER_PROTOCOL"]." 412 Precondition Failed");

取而代之的是:

header("HTTP/1.1 412 Precondition Failed");
header("HTTP/1.0 412 Precondition Failed");

为什么?因为$_SERVER["SERVER_PROTOCOL"]根据您的浏览器提供HTTP/1.1HTTP/1.0。如果使用错误的,apache可能会向响应中添加意外内容。例如,起始处的4位十六进制代码(校验和?),以及后面的零。