----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/52105/#review150185 -----------------------------------------------------------
src/master/http.cpp (lines 2036 - 2044) <https://reviews.apache.org/r/52105/#comment218053> Becasue we have an util function `startsWith`, how about change it like ``` diff --git a/src/master/http.cpp b/src/master/http.cpp index e9f9d16..c77229a 100644 --- a/src/master/http.cpp +++ b/src/master/http.cpp @@ -2038,6 +2038,11 @@ Future<Response> Master::Http::redirect(const Request& request) const // When request url is '/redirect' or '/master/redirect', redirect to the // base url of leading master to avoid infinite redirect loop. return TemporaryRedirect(basePath); + } else if (strings::startsWith(request.url.path, "/redirect/") || + strings::startsWith(request.url.path, + "/" + master->self().id + "/redirect/")) { + // Stop redirection here to avoid fall into an infinite redirection loop. + return NotFound(); } else { ``` src/master/http.cpp (lines 2038 - 2040) <https://reviews.apache.org/r/52105/#comment218055> Another problem here is if we call `redirect(/redirect_a)` in http.cpp, would get unexpected result. So how about just return 404 which consistent with `/redirect/` ``` // When current master is not the leader, redirect to the leading master. if (!master->elected()) { return redirect(request); } ``` - haosdent huang On Sept. 22, 2016, 8:47 p.m., Charles Allen wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/52105/ > ----------------------------------------------------------- > > (Updated Sept. 22, 2016, 8:47 p.m.) > > > Review request for mesos and Vinod Kone. > > > Bugs: MESOS-6210 > https://issues.apache.org/jira/browse/MESOS-6210 > > > Repository: mesos > > > Description > ------- > > Prevent `/redirect/foo` loop. > > > Diffs > ----- > > src/master/http.cpp 9005e7c308d5f57c6f5c573951d468a3ba730740 > > Diff: https://reviews.apache.org/r/52105/diff/ > > > Testing > ------- > > Single Node started with `./src/mesos-master --work_dir=/tmp/mesos` > > > ``` > Charless-MacBook-Pro:~ charlesallen$ curl -v http://127.0.0.1:5050/redirect > * Trying 127.0.0.1... > * Connected to 127.0.0.1 (127.0.0.1) port 5050 (#0) > > GET /redirect HTTP/1.1 > > Host: 127.0.0.1:5050 > > User-Agent: curl/7.43.0 > > Accept: */* > > > < HTTP/1.1 307 Temporary Redirect > < Date: Thu, 22 Sep 2016 20:35:18 GMT > < Location: //10.17.97.185:5050 > < Content-Length: 0 > < > * Connection #0 to host 127.0.0.1 left intact > Charless-MacBook-Pro:~ charlesallen$ curl -v > http://127.0.0.1:5050/master/redirect > * Trying 127.0.0.1... > * Connected to 127.0.0.1 (127.0.0.1) port 5050 (#0) > > GET /master/redirect HTTP/1.1 > > Host: 127.0.0.1:5050 > > User-Agent: curl/7.43.0 > > Accept: */* > > > < HTTP/1.1 307 Temporary Redirect > < Date: Thu, 22 Sep 2016 20:35:23 GMT > < Location: //10.17.97.185:5050 > < Content-Length: 0 > < > * Connection #0 to host 127.0.0.1 left intact > Charless-MacBook-Pro:~ charlesallen$ curl -v > http://127.0.0.1:5050/master/redirect/ > * Trying 127.0.0.1... > * Connected to 127.0.0.1 (127.0.0.1) port 5050 (#0) > > GET /master/redirect/ HTTP/1.1 > > Host: 127.0.0.1:5050 > > User-Agent: curl/7.43.0 > > Accept: */* > > > < HTTP/1.1 404 Not Found > < Date: Thu, 22 Sep 2016 20:35:29 GMT > < Content-Length: 0 > < > * Connection #0 to host 127.0.0.1 left intact > Charless-MacBook-Pro:~ charlesallen$ curl -v > http://127.0.0.1:5050/master/redirect/foo > * Trying 127.0.0.1... > * Connected to 127.0.0.1 (127.0.0.1) port 5050 (#0) > > GET /master/redirect/foo HTTP/1.1 > > Host: 127.0.0.1:5050 > > User-Agent: curl/7.43.0 > > Accept: */* > > > < HTTP/1.1 307 Temporary Redirect > < Date: Thu, 22 Sep 2016 20:35:31 GMT > < Location: //10.17.97.185:5050 > < Content-Length: 0 > < > * Connection #0 to host 127.0.0.1 left intact > Charless-MacBook-Pro:~ charlesallen$ curl -v > http://127.0.0.1:5050/master/redirect/foo/bar > * Trying 127.0.0.1... > * Connected to 127.0.0.1 (127.0.0.1) port 5050 (#0) > > GET /master/redirect/foo/bar HTTP/1.1 > > Host: 127.0.0.1:5050 > > User-Agent: curl/7.43.0 > > Accept: */* > > > < HTTP/1.1 307 Temporary Redirect > < Date: Thu, 22 Sep 2016 20:35:34 GMT > < Location: //10.17.97.185:5050 > < Content-Length: 0 > < > * Connection #0 to host 127.0.0.1 left intact > Charless-MacBook-Pro:~ charlesallen$ curl -v > http://127.0.0.1:5050/redirect/foo/bar > * Trying 127.0.0.1... > * Connected to 127.0.0.1 (127.0.0.1) port 5050 (#0) > > GET /redirect/foo/bar HTTP/1.1 > > Host: 127.0.0.1:5050 > > User-Agent: curl/7.43.0 > > Accept: */* > > > < HTTP/1.1 307 Temporary Redirect > < Date: Thu, 22 Sep 2016 20:35:41 GMT > < Location: //10.17.97.185:5050 > < Content-Length: 0 > < > * Connection #0 to host 127.0.0.1 left intact > Charless-MacBook-Pro:~ charlesallen$ curl -v > http://127.0.0.1:5050/redirectNOTFOUND/foo/bar > * Trying 127.0.0.1... > * Connected to 127.0.0.1 (127.0.0.1) port 5050 (#0) > > GET /redirectNOTFOUND/foo/bar HTTP/1.1 > > Host: 127.0.0.1:5050 > > User-Agent: curl/7.43.0 > > Accept: */* > > > < HTTP/1.1 404 Not Found > < Date: Thu, 22 Sep 2016 20:35:47 GMT > < Content-Length: 0 > < > * Connection #0 to host 127.0.0.1 left intact > ``` > > It is worth noting that in this PR /master/redirect/ and /redirect/ return > 404, not 307. This behavior is consistent with master. > > > Thanks, > > Charles Allen > >
