Follow HTTP 308 redirects

Fixes https://github.com/dart-lang/sdk/issues/43548.

Bug: 43548
Change-Id: Ifd07941f4ae3ef9c9874c1be4254a2fe3c15ae2c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/165404
Reviewed-by: Ben Konyi <bkonyi@google.com>
This commit is contained in:
Filip Hracek 2020-10-01 14:02:40 +00:00 committed by Ben Konyi
parent 9c59897fc4
commit 7e7c01e804
5 changed files with 11 additions and 2 deletions

View file

@ -2,6 +2,11 @@
### Core libraries
#### `dart:io`
* `HttpRequest` will now correctly follow HTTP 308 redirects
(`HttpStatus.permanentRedirect`).
### Dart VM
### Dart2JS

View file

@ -1945,8 +1945,9 @@ abstract class HttpClientRequest implements IOSink {
* and only for the status codes [HttpStatus.movedPermanently]
* (301), [HttpStatus.found] (302),
* [HttpStatus.movedTemporarily] (302, alias for
* [HttpStatus.found]), [HttpStatus.seeOther] (303) and
* [HttpStatus.temporaryRedirect] (307). For
* [HttpStatus.found]), [HttpStatus.seeOther] (303),
* [HttpStatus.temporaryRedirect] (307) and
* [HttpStatus.permanentRedirect] (308). For
* [HttpStatus.seeOther] (303) automatic redirect will also happen
* for "POST" requests with the method changed to "GET" when
* following the redirect.

View file

@ -350,6 +350,7 @@ class _HttpClientResponse extends _HttpInboundMessageListInt
bool get isRedirect {
if (_httpRequest.method == "GET" || _httpRequest.method == "HEAD") {
return statusCode == HttpStatus.movedPermanently ||
statusCode == HttpStatus.permanentRedirect ||
statusCode == HttpStatus.found ||
statusCode == HttpStatus.seeOther ||
statusCode == HttpStatus.temporaryRedirect;

View file

@ -106,6 +106,7 @@ Future<HttpServer> setupServer() {
addRedirectHandler(n++, HttpStatus.movedTemporarily);
addRedirectHandler(n++, HttpStatus.seeOther);
addRedirectHandler(n++, HttpStatus.temporaryRedirect);
addRedirectHandler(n++, HttpStatus.permanentRedirect);
for (int i = n; i < 10; i++) {
addRedirectHandler(i, HttpStatus.movedPermanently);
}

View file

@ -106,6 +106,7 @@ Future<HttpServer> setupServer() {
addRedirectHandler(n++, HttpStatus.movedTemporarily);
addRedirectHandler(n++, HttpStatus.seeOther);
addRedirectHandler(n++, HttpStatus.temporaryRedirect);
addRedirectHandler(n++, HttpStatus.permanentRedirect);
for (int i = n; i < 10; i++) {
addRedirectHandler(i, HttpStatus.movedPermanently);
}