从 javascript 获取当前页面的 http 状态

有什么方法可以从 javascript 获得当前网页的 http 状态?

花了一些时间在网上搜索,但没有运气在所有... 似乎是不可能的,但想与堆栈溢出检查,也许一些花哨的变通方法。

(从服务器提供它作为响应主体的一部分是不可接受的,这个状态应该只能通过 http 头来获得)

26721 次浏览

这是不可能的,对不起。

您只能检查页面加载的状态 Try: var x = document.readyState; X 的结果可能是: 五种价值观之一:

uninitialized - Has not started loading yet
loading - Is loading
loaded - Has been loaded
interactive - Has loaded enough and the user can interact with it
complete - Fully loaded

它不漂亮,但是你可以使用:

t = jQuery.get(location.href)
.success(function () { console.log(t.status) })
.error(function()    { console.log(t.status) });

当 Eric 说,这个解决方案将从相同的页面发出一个新的请求,并且不显示当前请求的状态。

你可以的

只需使用 XMLHttpRequest请求相同的页面,即 URI。假设你在 stop.php中的 /stop.php页面可以这样做:

<script>
function xhrRequest(){
console.log(this.status);
// Do some logic here.
}
function getReq(url){
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", xhrRequest);
oReq.open("GET", url);
oReq.send();
}
getReq("/stop.php");
</script>

看看这个 演示

注:

你必须注意,这是一个页面的副本,而不是页面本身。 我已经在一个页面上使用了这个解决方案,其中服务器可能 当请求来自时生成禁止 HTTP状态码 未经授权的 IP 地址,所以这里的条件非常简单 原件和复印件没有太大区别 你模拟了它的造访。

一句话:

fetch(location.href).then(response => console.log(response.status));

这是异步的,如果你需要一个同步的解决方案使用 XMLHttpRequest(在另一个答案)与 False或使用 async/await感觉同步,但仍然是异步的引擎盖。

或者

不需要额外调用的方法需要在服务器端的页面中包含状态代码(例如,在 meta 标记中) ,然后在客户端通过 JavaScript 读取它。

Java + Thymeleaf:

<meta name="statuscode" th:content="${#response.status}">

PHP (未经验证) :

<meta name="statuscode" content="<?php echo http_response_code() ?>">