PHP 和自定义 HTTP 标头,不好的做法


PHP and custom HTTP headers, bad practice?

我有一个用于PHP应用程序的RESTful API的自定义实现,它返回json数据,为了传达操作的状态,即请求中是否有失败,我设置了一个自定义HTTP标头,其中包含一个(非常小的)json对象作为字符串。这很好用,因为我可以发送响应并在客户端轻松检索它们,而不会弄乱发送的实际数据。

问题是,使用这种方法是否有任何我可能没有意识到的缺点?应用程序设置自定义 http 标头似乎并不常见,所以我想知道这是一种不好的做法还是不知何故的糟糕"品味"。

这是一个有趣的问题。它不应该有任何理由成为问题,但您应该考虑一些事项:

  1. 标头对于应用程序必须是唯一的。不只是现在,而是永远。您应该确保在它们前面加上前缀,例如 X-MyApplication-Foo: Bar .不这样做可能会导致将来发生冲突.

  2. 防火墙有时(很少)对过滤未知的HTTP标头有点过分热心。这应该不是问题,但要记住.

  3. 与现代浏览器相比,旧版浏览器对标头字段大小的限制较小,因此您需要尽可能多地测试.

是否有理由不能使用标准HTTP错误代码?我知道您可能希望提供堆栈跟踪或其他有用的调试信息,但是在发生错误的情况下,您不会只返回包含错误信息的 JSON blob 而不是正常的"结果"JSON 数据吗?您可以根据HTTP错误代码轻松检测差异,并以不同的方式处理这两种情况。

我担心您建议的原因是标头用于更改或导致浏览器行为 - 它们不打算成为数据存储机制。

伪代码示例:

switch(httpResponseCode)
{
    case 200:
        parseResult(json);
        break;
    case 403:
        parseForbidden(json);
        break;
    case 500:
        parseServerError(json);
        break;
    default:
        // bad response code, handle appropriately
}