PHP代码如何确定Apache决定返回HTTP状态400?

时间:2016-12-20 09:57:07

标签: php apache http-status-code-400

我有一个Javascript客户端,它使用JQuery将Ajax POST请求发送到共享Hostgator服务器上的PHP代码。帖子数据是几百KB的JSON数据,使用file_get_contents('php://input')读取。 PHP后期数据限制报告为64 MB,通常一切正常。

但是每隔几天就会使用非法的JSON字符串调用PHP代码,并且客户端的状态为400.可能这个状态自动来自Apache,因为我的代码没有做任何特殊的发送。昨天我放置了代码来记录帖子数据,它被截断为长度为196,269的JSON ......可疑地只有3 * 64KB。

似乎请求被截断了;因为我只从众多客户中的一个看到这个,我可以想象存在一些间歇性的网络连接问题。如果这是一个糟糕的结论,我很高兴有人纠正我,但请注意,这不是我要问的问题。

我不明白为什么在这种情况下调用PHP代码。当收到格式错误的请求时,Apache不应该打电话吗?在收到包括发布数据在内的完整请求之前,Apache无法启动PHP执行,并且在PHP代码运行之前不知道存在问题,是吗?如果这是预期的行为,我的PHP代码如何检测到这是一个格式错误的请求?目前我依赖于检查json_decode中的错误,但这似乎并不完美,例如如果数据不是JSON。我正在编写代码来检查http_response_code(),但是我对PHP文档的阅读让我怀疑这会返回200:

  

如果未提供response_code,则返回当前状态代码。如果在Web服务器环境中使用,这两个值都将默认为200状态代码。

我很高兴能够指出Apache / PHP文档,它描述了如何处理这种错误案例;我对在线文档的搜索没有成功。

非常感谢您的帮助。

编辑:我被要求显示我正在发送数据;它如下图所示。但同样,问题不在于如何避免错误(我有理由相信这是一个连接问题),但在错误的存在中会发生什么。

  $.ajax({
    url: myurl,
    xhrFields: {'withCredentials': true}, // Send credentials to the server to allow CORS
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    type: 'POST', // Means that this changes server state (i.e. not cachable) and needed to send large amounts of data
    data: JSON.stringify(dataToSend),
    timeout: 120000,
    async: true,
    success: syncStepSucc,
    error: syncAjaxErr
  } );

编辑:请注意,当Apache收到乱码/截断数据时,我试图了解Apache和PHP之间的交互,而Apache决定返回HTTP状态400.后期数据限制为64 MB,远远超过196收到的KB。

0 个答案:

没有答案