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

Mah*_*ahn 15 php http http-headers

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

问题是,使用这种方法可能没有任何弊端吗?应用程序设置自定义http标头似乎并不常见,所以我想知道这是一种不好的做法还是不好的"品味".

Pol*_*ial 14

这是个有趣的问题.它应该没有任何理由成为问题,但您应该考虑以下几点:

  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
}
Run Code Online (Sandbox Code Playgroud)