【发布时间】:2021-03-04 22:52:29
【问题描述】:
如何以跨浏览器工作的方式检查来自 JavaScript 提取的响应是否有效(状态 200)?
我找到的唯一解决方案是将响应读取为 ArrayBuffer 并逐字节手动检查内容以查看它是否是有效文件。不太实用。
在我的情况下,获取是在服务工作者中,所以我不知道正在获取什么样的资源(html 文档、图像、二进制文件等),我只想根据它采取不同的操作成功与否。
fetch('http://example.com/some_resource')
.then(function(response)
{
if (response.ok)
{
// Works for most browsers, but not Chrome and Firefox on Android
}
response.arrayBuffer().thenCheckEveryByteOfTheFile; // Do I really have to do this?
});
更新: MDN 文档是错误的。 Response.ok 是为 Android 上的 Chrome 和 Firefox 定义的。
【问题讨论】:
-
你如何定义“有效”。您正在命名很多不同的格式,包括“二进制文件”。为什么要逐字节检查?肯定有一种更快的方法可以确保至少其中一些格式的有效性?
-
@Evert:最简单的方法是如果我可以访问 HTTP 响应的第一行,通常是“HTTP/1.1 200 OK”。然后我可以解析它,看看它是否成功。但由于并非所有浏览器都可以访问它,所以我必须读取响应负载,然后如果 URL 以“.jpg”结尾,请检查第一个字节是否为 FF D8 FF。我认为你说对了。对于本应非常简单的事情来说极其不切实际。
-
@Evert:我有 HTML 文件、CSS 文件、字体文件、WEBP 文件、JPG 文件,以及来自 CGI 脚本的许多不同类型的二进制响应。
-
好吧,你对“有效”的定义有点不同。您正在寻找成功的响应,这是有道理的。为什么
response.ok在 chrome 和 firefox 上不适合你? -
我怀疑这与 CORS 有关
标签: javascript httpresponse fetch-api