followRedirects 属性
getter/setter 对
是否自动遵循重定向。
如果此请求不应自动遵循重定向,请将此属性设置为 false
。默认值为 true
。
自动重定向只会发生在 "GET" 和 "HEAD" 请求,并且只有对于状态码 HttpStatus.movedPermanently (301)、HttpStatus.found (302)、HttpStatus.movedTemporarily (302,即 HttpStatus.found 的别名)、HttpStatus.seeOther (303)、HttpStatus.temporaryRedirect (307) 和 HttpStatus.permanentRedirect (308)。对于 HttpStatus.seeOther (303),自动重定向也会发生在方法更改为 "GET" 的 "POST" 请求。
除将 "Authorization"、"WWW-Authenticate" 和 "Cookie" 等敏感头信息进行转发外,所有添加到请求的头信息都将添加到重定向请求中。如果遵循重定向到不是初始域名子域名或完全匹配的域名,这些头信息将被跳过。例如,从 "foo.com" 重定向到 "foo.com" 或 "sub.foo.com" 将转发敏感头信息,但重定向到 "bar.com" 不会。
请求中发送的任何正文都不会成为重定向请求的一部分。
为了精确控制重定向处理,请将此属性设置为 false
并单独发送 HTTP 请求来处理重定向。例如
final client = HttpClient();
var uri = Uri.parse("https://127.0.0.1/");
var request = await client.getUrl(uri);
request.followRedirects = false;
var response = await request.close();
while (response.isRedirect) {
response.drain();
final location = response.headers.value(HttpHeaders.locationHeader);
if (location != null) {
uri = uri.resolve(location);
request = await client.getUrl(uri);
// Set the body or headers as desired.
request.followRedirects = false;
response = await request.close();
}
}
// Do something with the final response.
实现
bool followRedirects = true;