Javascript 需要获取静态文件的状态

Javascript 需要获取静态文件的状态,javascript,html,css,request,xmlhttprequest,Javascript,Html,Css,Request,Xmlhttprequest,我需要在页面上获取静态文件的状态(http代码) 例如,html代码包含 <link rel="stylesheet" type="text/css" href="theme.css"> <link rel="stylesheet" type="text/css" href="https://example.com/theme.css"> <script src="script.js"></script> <script src="https

我需要在页面上获取静态文件的状态(http代码)

例如,html代码包含

<link rel="stylesheet" type="text/css" href="theme.css">
<link rel="stylesheet" type="text/css" href="https://example.com/theme.css">
<script src="script.js"></script>
<script src="https://example.com/script.js"></script>
<img src="image.png">
<img src="https://example.com/image.png">
它必须只使用Javascript完成

我要用这个

var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
        callback(xmlHttp.responseText);
}
xmlHttp.open("GET", theUrl, true); // true for asynchronous
xmlHttp.send(null);
有必要在收到状态后,不应通过对文件执行单独的GET请求来完成此操作

但是我无法找到在不执行单独的GET请求的情况下如何实现这一点


谁能找到解决方案?

如果您使用的是像PHP这样的服务器端语言,那么我有一些想法。例如

<?php
$url= $_POST["url"];
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_HEADER => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_NOBODY => true)); $header = explode("\n", curl_exec($curl)); curl_close($curl); $string = $header[0];
if(strpos($string, "200")){
    echo "200";
}else{
    echo "404";
}
?>
简而言之,如果不发送
请求
,就无法获取任何主机中存在的文件的
状态代码


因此,不发送多个AJAX请求(单独的GET请求)是不可能的。

我需要在这里做一些假设,所以请检查这些假设是否正确:-)

  • 您希望在浏览器中运行代码(即不在Electron或Node.js或Web扩展中)
  • 您希望保存额外的网络往返(例如,不发出额外的请求以丢弃响应,因为您只需要状态)
  • 您希望进一步处理结果
  • 您要求在HTML中插入静态文件(而不是注入JavaScript)
恐怕你不会有太多时间提出额外的要求

以下是一些想法,您可以进一步调查:

  • 提出额外的请求,而不是获取
    • 这将只请求HTTP头(正文将为空)
    • 遗憾的是,并非所有服务器都支持它
  • 在将响应转发到浏览器之前,请使用并查看状态代码。
    • 我不能告诉你,如何从服务人员那里得到回应
  • 尽早注册JavaScript,即直接在JavaScript中处理它们。
    • 不适用于HTML中链接的静态资源
如果你能提供更多关于你想做什么的细节,那就太好了

干杯


Ryuno Ki

如果是这样,您能不使用“GET”请求解决这个问题吗?若不使用“GET”请求,还有其他方法吗?但,若不向包含文件的服务器发送任何请求,如何检查文件的存在?
<?php
$url= $_POST["url"];
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_HEADER => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_NOBODY => true)); $header = explode("\n", curl_exec($curl)); curl_close($curl); $string = $header[0];
if(strpos($string, "200")){
    echo "200";
}else{
    echo "404";
}
?>
s=socket.socket()
s.connect('url',80)
s.send('GET /path HTTP/1.0\r\nHost:hostname\r\n\r\n')
print s.recv(1024) #some lines of headers