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

时间:2012-06-29 14:58:56

标签: php http http-headers

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

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

1 个答案:

答案 0 :(得分:14)

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

  1. 标题必须是您的应用程序所独有的。不只是现在,而是永远。你应该确保为它们添加前缀,例如: X-MyApplication-Foo: Bar。不这样做可能会在将来引起冲突。

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

  3. 较旧的浏览器对标题字段大小的限制比现代浏览器更小,因此您需要测试尽可能多的浏览器。

  4. 是否有理由不能使用标准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
    }