PHP后端有时返回带有HTML的状态代码500,我的前端如何处理?

PHP后端有时返回带有HTML的状态代码500,我的前端如何处理?,php,reactjs,axios,Php,Reactjs,Axios,我目前在React中使用AXIOS发出API请求,但遇到了一个问题。API提供程序通常返回2xx或404格式的JSON,但其他时候它返回HTML错误页面,这使得我的JSON错误处理无法工作。作为前端,这对我来说是完全随机的,因为我不知道哪些API返回什么,除非我使用错误的请求对每个API进行检查和测试(我假设这是后端的工作,并记录它,但他们不会这样做,所以这取决于我) 我和正在编写API的同事谈过,但他们告诉我,他们无法将这些API转换为JSON,必须将其保留为HTML,因为旧的PHP后端存在一

我目前在React中使用AXIOS发出API请求,但遇到了一个问题。API提供程序通常返回2xx或404格式的JSON,但其他时候它返回HTML错误页面,这使得我的JSON错误处理无法工作。作为前端,这对我来说是完全随机的,因为我不知道哪些API返回什么,除非我使用错误的请求对每个API进行检查和测试(我假设这是后端的工作,并记录它,但他们不会这样做,所以这取决于我)

我和正在编写API的同事谈过,但他们告诉我,他们无法将这些API转换为JSON,必须将其保留为HTML,因为旧的PHP后端存在一些限制。所以现在我必须同时处理JSON和HTML错误,但是,它们不会告诉我哪些是JSON,哪些是HTML。此外,我无法阅读HTML,也无法确定错误消息是什么,因此我只能给出一个一般性错误:即未找到资源。现在,他们告诉我,出于调试原因,他们想显示实际的错误消息,但我无法通过HTML获得(或者至少我认为我不能)

对于我来说,在我的拦截器中编写一个状态代码4xx-5xx是否为HTML的时候检测它是最好的选择?然后把它放在一个自定义错误对象中,并指定一个类型,这样我以后就可以知道它是否是HTML了


我从未处理过一整套返回两种错误类型的API,即JSON和HTML。我想知道是否有人处理过这个问题来解释这一点。

响应,即使是错误响应,也应该包含
内容类型
标题,对于json响应,它应该是
application/json
,对于html响应,它应该是
text/html
。您应该始终仅使用内容类型为
application/JSON
的JSON解码响应。事实上,如果响应中存在正确的内容类型头,axios将为您完成这项工作


不过,您的API有可能返回内容类型为
text/html
的JSON。如果出现这种情况,您必须与后端开发人员进行认真讨论,并坚决要求所有API响应都具有适当的
内容类型。

响应,甚至错误响应,应包含
内容类型
标题,对于json响应,该标题应为
application/json
,对于html响应,该标题应为
text/html
。您应该始终仅使用内容类型为
application/JSON
的JSON解码响应。事实上,如果响应中存在正确的内容类型头,axios将为您完成这项工作


不过,您的API有可能返回内容类型为
text/html
的JSON。如果出现这种情况,您必须与后端开发人员进行认真的讨论,并坚决要求在所有API响应中使用适当的
内容类型。

是否完全没有一致性?e、 所有的500都是HTML,或者类似的东西?如果检测到错误状态,则可能需要在尝试处理之前检查数据类型。响应头有望设置正确的内容类型。如果错误HTML是在一个一致的结构中,您可能会解析它以找到相关错误消息的位置…但是是的,这是一个巨大的PITA。我们的组织中的一个旧API出现了这个问题,我们消除了HTML错误。我很难相信,如果他们足够努力的话,他们真的无法摆脱它们。@ADyson我打赌他们没有尝试,因为在一天结束时,应用程序崩溃或数据未显示都是我的错,如果处理不当,除了我之外,没有人会看到错误消息。HTML错误页面非常庞大,我真的不想使用额外的资源来解析它,因为我正在处理的内部应用程序已经有大量的数据和操作。在这一点上,我只是倾向于为这些错误显示一个模式风格的弹出窗口,如果他们真的想看到调试代码的话,只显示整个错误……根本没有一致性吗?e、 所有的500都是HTML,或者类似的东西?如果检测到错误状态,则可能需要在尝试处理之前检查数据类型。响应头有望设置正确的内容类型。如果错误HTML是在一个一致的结构中,您可能会解析它以找到相关错误消息的位置…但是是的,这是一个巨大的PITA。我们的组织中的一个旧API出现了这个问题,我们消除了HTML错误。我很难相信,如果他们足够努力的话,他们真的无法摆脱它们。@ADyson我打赌他们没有尝试,因为在一天结束时,应用程序崩溃或数据未显示都是我的错,如果处理不当,除了我之外,没有人会看到错误消息。HTML错误页面非常庞大,我真的不想使用额外的资源来解析它,因为我正在处理的内部应用程序已经有大量的数据和操作。在这一点上,我倾向于为这些错误显示一个模式风格的弹出窗口,如果他们真的想看到调试代码,只显示整个错误…是的,这是服务器端。我完全无法控制。我已经和他们谈了至少4次了,我得到的只是我们无能为力。这个问题一直存在于我在该公司工作过的swift/android本机应用程序中,但我也没有找到一个好的解决方案,它总是让人觉得有黑客味,我很确定它是有黑客味的……react是可以容忍的,但本机应用程序会崩溃,除非我做额外的处理。是的,它是服务器端。我完全无法控制。我已经和他们谈了至少4次了,我得到的只是我们无能为力。这个问题一直存在于我在该公司工作过的swift/android本机应用程序中,但我也没有找到一个很好的解决方案,它总是感觉有问题,我很确定它是有问题的