我为一个项目创建了一个小的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是否可以实现这一点。
有什么想法吗?
答案 0 :(得分:3)
我认为这是因为xhr请求尝试使用经典的GET查询调用页面
排序。见the specification:
HEAD方法与GET相同,只是服务器不能 在响应中发送消息体(即,响应终止于 标题部分的结尾)。
我正试图找到一种方法来检测我何时处于这种情况,然后,不要触发“404检测到”。我不知道javascript是否可以实现这一点。
JavaScript在很大程度上是无关紧要的。它归结为HTTP。对于用于发出HTTP请求的任何编程语言,答案都是一样的。
您提出请求并查看回复内容。有一个特定的请求类型,用于从没有正文的GET请求中获取标头(HEAD,您正在使用它)。它不是100%可靠,因为有些服务器没有正确实现它。
标准中没有类似POST的内容。
找出某个请求是否会得到404响应的唯一100%可靠方法是实际提出该请求。