返回 HTTP 200 (OK) 而不是 301 (Moved Permanently)
HTTP 200 (OK) returned instead of 301 (Moved Permanently)
此 URL return 代码 301 到 wget
和 curl
,但 node-fetch
报告 200:
# wget https://www.h24info.ma/feed
--2021-03-19 11:30:23-- https://www.h24info.ma/feed
Resolving www.h24info.ma (www.h24info.ma)... 104.21.39.120, 172.67.145.67, 2606:4700:3030::6815:2778, ...
Connecting to www.h24info.ma (www.h24info.ma)|104.21.39.120|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
# curl -I https://www.h24info.ma/feed
HTTP/2 301
但是获取 returns 200(并且永远挂起):
fetch('https://www.h24info.ma/feed', {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36',
'accept': 'text/html,application/xhtml+xml'
}).then(function (res) {
console.error('node-fetch status: %s', res.status);
});
node-fetch status: 200
我错过了什么吗? Fetch 应该 return 301 以便可以中止请求并处理错误。
software
version
node-fetch
2.6.1
node
v14.15.3
npm
7.6.0
Operating System
Linux 4.9.0-15-amd64 #1 SMP Debian 4.9.258-1 (2021-03-08) x86_64 GNU/Linux
默认情况下 fetch
透明地遵循重定向。也就是说,如果 URL 请求 returns 一个 301/302 重定向响应代码,fetch
将自动向重定向 URL 发出另一个请求,你得到的响应将是来自第二个请求的那个。
您可以通过获取选项对象中的 redirect
字段配置此行为:
fetch(URL, {
redirect: 'manual' // do not follow redirects automatically
})
Check out the MDN docs for fetch
了解更多信息。
Fetch should return 301 so the request can be aborted and the error dealt with.
301 状态并不是真正的错误,所以在我看来 fetch
的默认行为是正确的。在大多数情况下,您想要的是 fetch
来请求指定的资源,而不管它实际在哪里。为此,如果服务器告诉 fetch
到别处寻找资源,它就会执行。
此 URL return 代码 301 到 wget
和 curl
,但 node-fetch
报告 200:
# wget https://www.h24info.ma/feed
--2021-03-19 11:30:23-- https://www.h24info.ma/feed
Resolving www.h24info.ma (www.h24info.ma)... 104.21.39.120, 172.67.145.67, 2606:4700:3030::6815:2778, ...
Connecting to www.h24info.ma (www.h24info.ma)|104.21.39.120|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
# curl -I https://www.h24info.ma/feed
HTTP/2 301
但是获取 returns 200(并且永远挂起):
fetch('https://www.h24info.ma/feed', {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36',
'accept': 'text/html,application/xhtml+xml'
}).then(function (res) {
console.error('node-fetch status: %s', res.status);
});
node-fetch status: 200
我错过了什么吗? Fetch 应该 return 301 以便可以中止请求并处理错误。
software | version |
---|---|
node-fetch | 2.6.1 |
node | v14.15.3 |
npm | 7.6.0 |
Operating System | Linux 4.9.0-15-amd64 #1 SMP Debian 4.9.258-1 (2021-03-08) x86_64 GNU/Linux |
默认情况下 fetch
透明地遵循重定向。也就是说,如果 URL 请求 returns 一个 301/302 重定向响应代码,fetch
将自动向重定向 URL 发出另一个请求,你得到的响应将是来自第二个请求的那个。
您可以通过获取选项对象中的 redirect
字段配置此行为:
fetch(URL, {
redirect: 'manual' // do not follow redirects automatically
})
Check out the MDN docs for fetch
了解更多信息。
Fetch should return 301 so the request can be aborted and the error dealt with.
301 状态并不是真正的错误,所以在我看来 fetch
的默认行为是正确的。在大多数情况下,您想要的是 fetch
来请求指定的资源,而不管它实际在哪里。为此,如果服务器告诉 fetch
到别处寻找资源,它就会执行。