Javascript 如何确定提取请求的状态代码?
我想获取一个URL并确定它有什么状态代码,特别是如果它有HTTP 301或HTTP 302状态代码:Javascript 如何确定提取请求的状态代码?,javascript,google-chrome,fetch,fetch-api,Javascript,Google Chrome,Fetch,Fetch Api,我想获取一个URL并确定它有什么状态代码,特别是如果它有HTTP 301或HTTP 302状态代码: fetch('https://httpstat.us/301', { redirect: 'true'}) .then(response => { console.log(response); const headers = response.headers.entries(); for (h of headers) {
fetch('https://httpstat.us/301', {
redirect: 'true'})
.then(response => {
console.log(response);
const headers = response.headers.entries();
for (h of headers) {
console.log(h);
}
}).catch(err => {
console.log("in error case")
console.log(err);
})
这确实给了我很多信息,特别是它通过以下方式告诉我:
response.redirected
response.redirected
这是真的。但这只是告诉我它重定向了,而不是状态码是什么
有没有一种方法可以使用fetchapi来确定请求的真实状态代码 确定首先回答您的问题否如果后端没有一些更改,您无法确定301和302之间的差异。(请按照此说明了解后端解决方案) 您可以做的另一件事是将redirect设置为“error”,在这种情况下,fetch将在所有重定向上抛出一个错误,您可以处理重定向时发生的情况 这样做的主要原因是(根据我的理解),因为301和302之间的差异主要对需要处理后续请求的行为(是永久更改缓存还是仅此请求)的浏览器有用
但就用户而言,规范规定这两种情况都要透明处理,这意味着您需要知道存在重定向,但导致重定向的状态代码并不重要。因此,只有response.redirected标志。但是如果您仍然需要,请遵循上述后端解决方案。至于代码不能检查的原因:在重定向的情况下,这将是任何重定向最终返回的响应的状态代码 所以,如果重定向最终将返回200的内容带到某个地方,那么response.status将仅为200。如前所述,没有中间状态代码暴露于浏览器中运行的前端JavaScript 这确实给了我很多信息,特别是它通过以下方式告诉我:
response.redirected
response.redirected
值得注意的是,为了能够检测是否有重定向,实际上您甚至不需要检查它。这是最简单的检查方法,但您也可以直接检查,如果这与您为fetch(…)
调用提供的请求URL不同,您就知道它被重定向了
这曾经是响应前检查的典型方式。重定向
另外值得注意的是:问题代码中的重定向:“true”
无效;这将导致代码过早失败。见:
ValueARequestRedirect
enum值,可以是以下字符串之一:
遵循
错误
手册
重定向:“follow”
。但是follow
实际上是重定向
的默认值,因此您不需要显式指定它,只需省略它即可
至于其他重定向
值:如中所述,除了一些服务人员案例外,您几乎肯定不想指定手动
。而error
意味着将任何重定向视为网络错误
在这种情况下,对于示例中的代码,redirect:'true'
将导致catch
被命中,并且您必须访问响应的任何细节,包括它是否被重定向
所以,回到你原来的问题:
我想获取一个URL并确定它有什么状态代码,特别是如果它有HTTP 301或HTTP 302状态代码
…答案是,对于重定向请求,在浏览器中运行的前端JavaScript代码确实无法检测任何重定向的确切状态代码
因此,如果您真的需要知道请求到给定URL可能发生的任何重定向的确切状态代码,您必须从后端代码发出请求,并在那里处理响应。您不能使用吗?我认为这是不正确的possible@andrewLiResponse.status表示最终目的地的状态,而不是请求的URL的状态