如何从ajax调用模拟501错误

时间:2016-08-25 20:16:19

标签: javascript jquery http

我在这次通话中冒出了一个http 501错误:

return $.ajax({
    url: finalUrl,
    success: function (result) {
        console.log('success call result');
        console.log(result);
        finalResult = result;
    },
    data: JSON.stringify(data),
    type: 'PATCH',
    contentType: 'application/json'
});

如何返回模拟错误的模拟,以便我可以在生产之外测试修复?我查看了chrome中的响应选项卡,我看到了一条HTML消息:

<HTML><HEAD>
<TITLE>Unsupported Request</TITLE>
</HEAD><BODY>
<H1>Unsupported Request</H1>
PATCH to http&#58;&#47;&#47;demo&#46;site&#46;com&#47;serviceName&#47;v1&#47;requests&#47;9305e338&#45;666a&#45;e611&#45;8516&#45;000c291891bb not supported.<P>
Reference&#32;&#35;8&#46;f0fd717&#46;1472154919&#46;9959c96
</BODY></HTML>

我们怀疑API根本没有受到攻击,被防火墙阻止。我不知道在这种情况下我是否应该期待一个字符串或对象?如果是object,那么该对象的成员是什么?

菲德勒说:

服务器:AkamaiGHost
哑剧版:1.0
内容类型:text / html
内容长度:350
到期日:2016年8月25日星期四20:21:49 GMT
日期:2016年8月25日星期四20:21:49 GMT
连接:关闭

2 个答案:

答案 0 :(得分:0)

  

我们怀疑API根本没有遭到攻击,被防火墙阻止。

从错误中看,您正在点击未针对该请求类型配置的后端。

假设您也控制了后端,请参阅这些问题以寻找可能的解决方案。

Does tomcat support http PATCH method?

How do I stop Apache httpd from rejecting HTTP PATCH requests?

如果您确实控制了后端,但上面没有帮助,请确保您的控制器功能支持该请求方法。例如,在Spring中,您必须明确声明:

@Controller
MyController {

   @Requestmapping(value = "/api/patchTheThing", method=RequestMethod.PATCH)
   @ResponseBody String patchTheThing(....) {
        ...
   }
}

答案 1 :(得分:0)

只需在您选择的服务器上设置端点,然后使用您选择的Web服务器配置或编码语言发出501响应。但问题似乎很清楚,服务器不期望PATCH请求。如果你遇到网络问题,你根本就不会得到回应。

您应该强烈考虑确保您的JavaScript代码处理快乐路径/成功结果以及其他类型的服务器响应结果,以便您的应用程序可以更好地处理它想要从这些错误中恢复的方式。