XHR捕获404错误

时间:2017-08-04 13:33:56

标签: javascript http

我为一个项目创建了一个小的javascript库,在这个库中,我有一个函数可以检测我们在404页面上的时间。

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
        if (this.readyState == 4) {
            if (this.status == 404) {
                console.log("404 detected");
            }
        }
    }
    xhr.open('HEAD', window.location.href);
    xhr.send();

适用于大多数情况。但我对某事有疑问。

当我到达带有POST查询的页面时,此函数告诉我它是404页面。我认为这是因为xhr请求尝试使用经典的GET查询调用页面(为了不重新提交表单)然后webapp返回404,因为页面不接受GET查询。

我正试图找到一种方法来检测我何时处于这种情况,然后,不要触发“404检测到”。我不知道javascript是否可以实现这一点。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

  

我认为这是因为xhr请求尝试使用经典的GET查询调用页面

排序。见the specification

  

HEAD方法与GET相同,只是服务器不能      在响应中发送消息体(即,响应终止于      标题部分的结尾)。

  

我正试图找到一种方法来检测我何时处于这种情况,然后,不要触发“404检测到”。我不知道javascript是否可以实现这一点。

JavaScript在很大程度上是无关紧要的。它归结为HTTP。对于用于发出HTTP请求的任何编程语言,答案都是一样的。

您提出请求并查看回复内容。有一个特定的请求类型,用于从没有正文的GET请求中获取标头(HEAD,您正在使用它)。它不是100%可靠,因为有些服务器没有正确实现它。

标准中没有类似POST的内容。

找出某个请求是否会得到404响应的唯一100%可靠方法是实际提出该请求。